Jak zmienić ścieżkę do pliku wykonywalnego dla usługi Windows?

55

Chcę zmienić ścieżkę do pliku wykonywalnego usługi z wiersza polecenia.

Jak mogę to zrobić?

Chcę uruchomić inny plik .EXE ze ścieżki tej usługi do pliku wykonywalnego.

sam
źródło
Jeśli odpowiedź Dave'a nie jest tym, czego potrzebujesz, skorzystaj z linku „edytuj”, aby wyjaśnić nieco więcej?
Arjan,

Odpowiedzi:

70

Możesz użyć sc configpolecenia, aby zmienić ścieżkę, na którą wskazuje usługa:

SC CONFIG YourServiceName binPath= "C:\SomeDirectory\YourFile.EXE"

Spowoduje to zaktualizowanie nazwanej usługi YourServiceNamei zmianę wpisu „Ścieżka do pliku wykonywalnego” na C:\SomeDirectory\YourFile.EXE. Później będziesz chciał ponownie uruchomić usługę, co możesz zrobić za pomocą:

NET STOP YourServiceName & NET START YourServiceName
LittleBobbyTables
źródło
Jeśli przenosisz konfigurację MySQL (.ini) na inny dysk. Możesz pominąć wewnętrzne cytaty. Po prostu zawiń cały zmodyfikowany ciąg w jedną parę podwójnych cudzysłowów. Przeniesiono mój folder .ini i folder danych na dysk D: na Win7.
Brian Boatright,
1
Co, jeśli Path to executablezawiera również cytaty i inne parametry? Na przykład: "C:\Program Files\CollabNet\Subversion Server\svnserve.exe" --service -r "E:\Repositories" --listen-port "3690"niestety musiałem wybrać trasę regedit.
James Skemp,
@James - Jestem prawie pewien, że uda ci się uciec przed tymi postaciami, ale będę musiał się z tym pobawić i wrócić do ciebie.
LittleBobbyTables,
6
Chciałbym zauważyć, że pomiędzy binpath = a poleceniem jest wymagana spacja. Głupi, wiem.
Chloe,
2
Cudzysłowy w binPath mogą być poprzedzone ukośnikiem odwrotnym: \ "
gwyn
16

Musisz to zrobić w rejestrze:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services

Przejdź do usługi, a następnie zmień nazwę obrazu, aby odzwierciedlić nową ścieżkę

Jak zawsze wykonaj kopię zapasową systemu PRIOR.

Dave
źródło
To działało dla mnie lepiej. Usługa, którą zmieniałem, zawierała złożone argumenty.
John Allers,
2

Możesz to również zrobić za pomocą 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")

Lub:

Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\My Service" `
    -Name ImagePath -Value "C:\Program Files (x86)\My Service\NewName.EXE"
Greg Sansom
źródło
1

Powyższa odpowiedź działa świetnie, nie mogę na nią odpowiedzieć, ale aby dodać, na wypadek, gdybyś potrzebował cudzysłowów lub innych argumentów na ścieżce, powiedz, aby naprawić lukę w cudzysłowiu ścieżki w rejestrze, taką jak ścieżka obrazu, może wykonać następujące czynności z CMD jako administrator:

(np. dla C: \ Program Files (x86) \ YourService \ YourProcess.exe)

SC CONFIG YourService binPath= "\"C:\Program Files (x86)\YourService\YourProcess.exe\"

jako administrator możesz wykonać następujące czynności z programu PowerShell :

 SC.exe CONFIG YourService binPath= --% "\"C:\Program Files (x86)\YourService\YourProcess.exe\"

To daje następujący wynik:

"C:\Program Files (x86)\YourService\YourProcess.exe"

... krwawe kłótnie i parametry ucieczki to koszmar! Mam nadzieję, że to pomoże komuś w przyszłości.

Maverick Sevmont
źródło
0

Nie można bezpośrednio edytować ścieżki do wykonania usługi. W tym celu możesz użyć polecenia sc,

Otwórz wiersz polecenia jako administrator, a następnie wpisz następujące polecenie,

SC CONFIG ServiceName binPath= "Path of your file"

Na przykład:

sc config MongoDB binPath="I:\Programming\MongoDB\MongoDB\bin\mongod.exe --config I:\Programming\MongoDB\MongoDB\bin\mongod.cfg --service"
Codemaker
źródło
: - Twój wygląd wygląda tak samo jak LittleBobbyTables, jeśli możesz szczegółowo opisać różnicę, proszę. Przeczytaj Jak odpowiedzieć i zwiedzać są zawsze dobre od czasu do czasu.
mic84