Modyfikowanie „Ścieżki do pliku wykonywalnego” usługi Windows

253

Chciałbym zmodyfikować ścieżkę do mojej aplikacji, ale spowoduje to jej uszkodzenie, ponieważ usługa nadal wskazuje starą lokalizację.

Przechodząc do Administrative Tools > Services, możesz otworzyć okno właściwości i wyświetlić Path to executable, ale nie ma sposobu, aby je zmienić.

Czy użytkownik może zmodyfikować ścieżkę usługi bez konieczności ponownej instalacji aplikacji?

GenericJon
źródło

Odpowiedzi:

245

Istnieje również takie podejście widoczne w SuperUser, który używa scwiersza poleceń zamiast modyfikować rejestr:

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

Uwaga: spacja po binPath=jest ważna. Możesz również wysłać zapytanie o bieżącą konfigurację, używając:

sc qc <service name>

Wyświetla dane wyjściowe podobne do:

[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: nazwa usługi

    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
Niall Connaughton
źródło
24
Poleciłbym to podejście zamiast bezpośrednich zmian rejestru. Wiele ścieżek wymaga ciągów cytowanych, które można wprowadzić w następujący sposób, na przykład w MS SQL Server: sc config mssqlserver binPath= "\"F:\SQL DATA\MSSQL10.MSSQLSERVER\MSSQL\Binn\sqlservr.exe\" -sMSSQLSERVER"
Marc Durdin,
2
Prawdopodobnie jest też nieco ładniejszy w skrypcie wdrażania niż metoda bezpośredniej modyfikacji rejestru.
Niall Connaughton
Słodkie. Czystsze niż grzebanie w reg. ** Uwaga: Aby zobaczyć zmianę, musisz zamknąć i otworzyć services.msc.
yonsk,
1
Jeśli dostaniesz [SC] QueryServiceConfig FAILED 122:po sc qc Xużyciu sc qc X 1000zobacz to
raphael
13
Jeśli używasz tego z PowerShell, upewnij się, że używasz sc.exe, a nie nagisc
fiat
292

Wymaga edycji rejestru, ale informacje o usłudze można znaleźć w HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. Znajdź usługę, którą chcesz przekierować, zlokalizuj ImagePathpodklucz i zmień tę wartość.

Matt McHugh
źródło
3
Chociaż ostatecznie prowadzi to do danych rejestru, powinienem wspomnieć, że istnieją specjalne funkcje Windows API do obsługi usługi. Należy unikać bezpośredniej modyfikacji rejestru (ponieważ nie możesz być pewien, co jeszcze zmienia system Windows, gdy modyfikuje ścieżkę do pliku exe, np.), Chyba że masz absolutną pewność, co robisz.
lospejos
3
@lospejos „Powinienem wspomnieć, że istnieją specjalne funkcje Windows API do obsługi usługi” ... co by było?
Nick M
Jeśli ktoś nie widzi ścieżki usługi zaktualizowanej w Services.msc, spróbuj zabić mmc.exe „taskkill / F / IM mmc.exe” w cmd
Drag0nKn1ght
10

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
3

Otwórz Uruchom (win + R), wpisz „Regedit.exe”, aby otworzyć „Edytor rejestru”, przejdź do

HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services

znajdź „ Apache2.4 ” otwórz folder znajdź „ ImagePath ” po prawej stronie, otwórz „ImagePath” w „ wartości danych ” wstaw następującą ścieżkę:

„C: \ xampp \ apache \ bin \ httpd.exe” - k runservice wroga XAMPP dla innych wskazuje lokalizację, w której jest zainstalowany Apache, a wewnątrz znajduje się folder bin „C: (lokalizacja zainstalowanego Apache) \ bin \ httpd.exe” -k runservice

Antony Joseph
ź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,

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
0

Niewielka modyfikacja odpowiedzi @CodeMaker, dla każdego takiego jak ja, który próbuje zmodyfikować usługę MongoDB w celu użycia uwierzytelnienia.

Kiedy spojrzałem na „Ścieżkę do pliku wykonywalnego” w „Usługach”, wykonywana linia zawierała już znaki mowy. Musiałem więc wprowadzić drobne modyfikacje do jego przykładu.

Aby być konkretnym.

  1. Wpisz Usługi w systemie Windows
  2. Znajdź MongoDB (lub usługę, którą chcesz zmienić) i otwórz usługę, pamiętając o jej zatrzymaniu.
  3. Zanotuj nazwę usługi (nie nazwę wyświetlaną)
  4. Wyszukaj i skopiuj „Ścieżkę do pliku wykonywalnego” i skopiuj ją.

Dla mnie ścieżka była (zwróć uwagę na znaki mowy)

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

W typie wiersza poleceń

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

W moim przypadku tak było

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"
John Duskin
źródło
-2

Możesz usunąć usługę:

sc delete ServiceName

Następnie ponownie utwórz usługę.

Kim Wilson
źródło
3
Nie ma takiej potrzeby, istnieją co najmniej 3 lepsze sposoby na to
Liam,
-2

Nieco głębiej dzięki poleceniu „SC”, jesteśmy w stanie wyodrębnić wszystkie „Nazwa usług” i uzyskać wszystkie „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]

Wykonuj „małą” edycję NOTEPAD2. Wybierz „SERVICE_NAME:”, CTRL + H, kliknij „Zamień wszystko” Wyobraź sobie, że możemy zrobić „Zamień wszystko” w „CMD”

Następnie przejdź do „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]

to „USŁUGI na naszej maszynie” Surowe dane są gotowe do wprowadzenia „przyszłego pliku wsadowego”, więc wynik wygląda następująco !!!

+ -------------+-------------------------+---------------------------+---------------+--------------------------------------------------+------------------+-----+----------------+--------------+--------------------+
| 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        |

Ale HTML będzie znacznie łatwiejszy: D

Wszelkie jasne pomysły na ulepszenia są mile widziane V ^ _ ^

Rhak Kahr
źródło
Lub użyj, scktóry jest o wiele, wiele łatwiejszy i mniej podobny do zepsucia.
Liam,