การแก้ไข“ เส้นทางสู่การปฏิบัติการ” ของบริการ windows


253

ฉันต้องการแก้ไขพา ธ ไปยังแอปพลิเคชันของฉัน แต่การทำเช่นนั้นจะหยุดเพราะบริการยังคงชี้ไปที่ตำแหน่งเดิม

โดยไปที่Administrative Tools > Servicesคุณสามารถเปิดกล่องโต้ตอบคุณสมบัติและดูPath to executableแต่ไม่มีวิธีที่จะเปลี่ยน

มีวิธีใดบ้างที่ผู้ใช้สามารถปรับเปลี่ยนเส้นทางบริการโดยไม่ต้องติดตั้งแอปพลิเคชันอีกครั้ง?

คำตอบ:


245

นอกจากนี้ยังมีวิธีการนี้ที่เห็นบน SuperUserซึ่งใช้scบรรทัดคำสั่งแทนการปรับเปลี่ยนรีจิสทรี:

sc config <service name> binPath= <binary path>

หมายเหตุ: ช่องว่างหลังจากbinPath=นั้นสำคัญ คุณสามารถสอบถามการกำหนดค่าปัจจุบันโดยใช้:

sc qc <service name>

แสดงเอาต์พุตคล้ายกับ:

[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: ชื่อบริการ

    TYPE               : 10  WIN32_OWN_PROCESS
    START_TYPE         : 2   AUTO_START
    ERROR_CONTROL      : 1   NORMAL
    BINARY_PATH_NAME   : C:\Services\ServiceName
    LOAD_ORDER_GROUP   :
    TAG                : 0
    DISPLAY_NAME       : <Display name>
    DEPENDENCIES       :
    SERVICE_START_NAME : user-name@domain-name

24
ฉันจะแนะนำวิธีการนี้มากกว่าการเปลี่ยนแปลงรีจิสทรีโดยตรง เส้นทางจำนวนมากจำเป็นต้องมีสตริงที่ยกมาซึ่งคุณสามารถป้อนดังต่อไปนี้ตัวอย่างเช่นกับ MS SQL Server: sc config mssqlserver binPath= "\"F:\SQL DATA\MSSQL10.MSSQLSERVER\MSSQL\Binn\sqlservr.exe\" -sMSSQLSERVER"
Marc Durdin

2
อาจเป็นเรื่องเล็กน้อยในสคริปต์การปรับใช้มากกว่าวิธีแก้ไขรีจิสทรีโดยตรง
Niall Connaughton

หวาน. สะอาดกว่าล้อเล่นรอบ ๆ ** หมายเหตุ: คุณจะต้องปิดและเปิด services.msc เพื่อดูการเปลี่ยนแปลง
yonsk

1
หากคุณได้รับ[SC] QueryServiceConfig FAILED 122:หลังการsc qc Xใช้งานให้sc qc X 1000ดูนี้
ฟาเอล

13
ถ้าใช้นี้จาก PowerShell ให้แน่ใจว่าคุณใช้sc.exeไม่เปลือยกายsc
fiat

292

มันเกี่ยวข้องกับการแก้ไขรีจิสทรี HKEY_LOCAL_MACHINE\System\CurrentControlSet\Servicesแต่ข้อมูลบริการสามารถพบได้ใน ค้นหาบริการที่คุณต้องการเปลี่ยนเส้นทางค้นหาImagePathคีย์ย่อยและเปลี่ยนค่านั้น


3
แม้ว่าในที่สุดสิ่งนี้นำไปสู่ข้อมูลรีจิสทรีฉันควรพูดถึงว่ามีฟังก์ชั่น Windows API พิเศษเพื่อจัดการกับบริการอยู่ การปรับเปลี่ยนรีจิสทรีโดยตรงควรหลีกเลี่ยง (เพราะคุณไม่สามารถมั่นใจได้ว่าอะไรที่มีการเปลี่ยนแปลงของ Windows เมื่อคุณปรับเปลี่ยนเส้นทางไปยัง exe, fe) ถ้าคุณเป็นอย่างแน่ใจว่าสิ่งที่คุณทำ
lospejos

3
@lospejos "ฉันควรจะพูดถึงว่ามีฟังก์ชั่น Windows API พิเศษเพื่อจัดการกับบริการ" ... ซึ่งจะเป็นอย่างไร
นิค M

หากมีคนไม่เห็นเส้นทางบริการที่อัปเดตใน Services.msc ลองฆ่า mmc.exe "taskkill / F / IM mmc.exe" ใน cmd
Drag0nKn1ght

10

คุณสามารถทำได้ด้วย PowerShell:

Get-WmiObject win32_service -filter "Name='My Service'" `
    | Invoke-WmiMethod -Name Change `
    -ArgumentList @($null,$null,$null,$null,$null, `
    "C:\Program Files (x86)\My Service\NewName.EXE")

หรือ:

Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\My Service" `
    -Name ImagePath -Value "C:\Program Files (x86)\My Service\NewName.EXE"

3

เปิด Run (win + R) พิมพ์ "Regedit.exe" เพื่อเปิด "Registry Editor" ไปที่

HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services

ค้นหา " Apache2.4 " เปิดโฟลเดอร์ค้นหา " ImagePath " ที่ด้านขวาเปิด "ImagePath" ภายใต้ " data data " ใส่เส้นทางต่อไปนี้:

"C: \ xampp \ apache \ bin \ httpd.exe" -k runservice ศัตรู XAMPP สำหรับคนอื่น ๆ ชี้ไปยังตำแหน่งที่ติดตั้ง Apache และอยู่ภายในโฟลเดอร์ bin "C: (ตำแหน่งที่ติดตั้ง Apache) \ bin \ httpd.exe" -k runservice


0

คุณไม่สามารถแก้ไขเส้นทางของคุณโดยตรงเพื่อดำเนินการบริการ เพื่อให้คุณสามารถใช้คำสั่ง sc

SC CONFIG ServiceName binPath= "Path of your file"

เช่น:

sc config MongoDB binPath="I:\Programming\MongoDB\MongoDB\bin\mongod.exe --config I:\Programming\MongoDB\MongoDB\bin\mongod.cfg --service"

0

การปรับเปลี่ยนเล็กน้อยสำหรับคำตอบของ @CodeMaker นี้สำหรับทุกคนอย่างฉันที่พยายามแก้ไขบริการ MongoDB เพื่อใช้การพิสูจน์ตัวตน

เมื่อฉันดูที่ "Path to executable" ใน "Services" บรรทัดที่ดำเนินการแล้วมีเครื่องหมายคำพูด ดังนั้นฉันจึงต้องทำการดัดแปลงเล็กน้อยกับตัวอย่างของเขา

ให้มีความเฉพาะเจาะจง

  1. พิมพ์บริการใน Windows
  2. ค้นหา MongoDB (หรือบริการที่คุณต้องการเปลี่ยน) และเปิดบริการตรวจสอบให้แน่ใจว่าได้หยุด
  3. จดบันทึกชื่อบริการ (ไม่ใช่ชื่อที่แสดง)
  4. ค้นหาและคัดลอก "เส้นทางไปยังปฏิบัติการ" และคัดลอก

สำหรับฉันเส้นทางคือ (หมายเหตุเครื่องหมายคำพูด)

"C:\Program Files\MongoDB\Server\4.2\bin\mongod.exe" --config "C:\Program Files\MongoDB\Server\4.2\bin\mongod.cfg" --service

ในประเภทบรรทัดคำสั่ง

sc config MongoDB binPath= "<Modified string with \" to replace ">"

ในกรณีของฉันนี้เป็น

sc config MongoDB binPath= "\"C:\Program Files\MongoDB\Server\4.2\bin\mongod.exe\" --config \"C:\Program Files\MongoDB\Server\4.2\bin\mongod.cfg\" --service -- auth"

-2

คุณสามารถลบบริการ:

sc delete ServiceName

จากนั้นสร้างบริการขึ้นใหม่


3
ไม่จำเป็นต้องทำเช่นนี้มีอย่างน้อย 3 วิธีที่ดีกว่าในการทำเช่นนี้
Liam

-2

ลึกเข้าไปเล็กน้อยด้วยคำสั่ง 'SC' เราสามารถแยก 'ชื่อบริการ' ทั้งหมดและได้รับ 'QueryServiceConfig' ทั้งหมด :)

>SC QUERY > "%computername%-services.txt" [enter]

>FIND "SERVICE_NAME: " "%computername%-services.txt" /i > "%computername%-services-name.txt" [enter]

>NOTEPAD2 "%computername%-services-name.txt" [enter]

ทำการแก้ไข NOTEPAD2 'เล็ก' เลือก 'SERVICE_NAME:', CTRL + H คลิก 'แทนที่ทั้งหมด' ลองจินตนาการว่าเราสามารถ 'แทนที่ทั้งหมด' ภายใน 'CMD'

จากนั้นดำเนินการต่อด้วย 'CMD' ..

>FOR /F "DELIMS= SKIP=2" %S IN ('TYPE "%computername%-services-name.txt"') DO @SC QC "%S" >> "%computername%-services-list-config.txt" [enter]

>NOTEPAD2 "%computername%-services-list-config.txt" [enter]

มันคือ 'บริการบนเครื่องของเรา' ข้อมูลดิบพร้อมสำหรับป้อน 'ไฟล์แบตช์ในอนาคต' ดังนั้นผลลัพธ์จะมีลักษณะดังนี้ด้านล่าง !!!

+ -------------+-------------------------+---------------------------+---------------+--------------------------------------------------+------------------+-----+----------------+--------------+--------------------+
| SERVICE_NAME | TYPE                    | START_TYPE                | ERROR_CONTROL | BINARY_PATH_NAME                                 | LOAD_ORDER_GROUP | TAG | DISPLAY_NAME   | DEPENDENCIES | SERVICE_START_NAME |
+ -------------+-------------------------+---------------------------+---------------+--------------------------------------------------+------------------+-----+----------------+--------------+--------------------+
+ WSearch      | 10  WIN32_OWN_PROCESS   | 2   AUTO_START  (DELAYED) | 1   NORMAL    | C:\Windows\system32\SearchIndexer.exe /Embedding | none             | 0   | Windows Search | RPCSS        | LocalSystem        |
+ wuauserv     | 20  WIN32_SHARE_PROCESS | 2   AUTO_START  (DELAYED) | 1   NORMAL    | C:\Windows\system32\svchost.exe -k netsvcs       | none             | 0   | Windows Update | rpcss        | LocalSystem        |

แต่ HTML จะค่อนข้างง่ายกว่า: D

ความคิดที่สดใสสำหรับการปรับปรุงยินดีต้อนรับ V ^ _ ^


หรือใช้งานscซึ่งมากง่ายกว่าและน้อยกว่า
เลียม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.