2011-08-25 2 views
192

Chciałbym zmodyfikować ścieżkę do mojej aplikacji, ale w ten sposób zepsuje ją, ponieważ usługa nadal wskazuje na starą lokalizację.Modyfikowanie "ścieżki do pliku wykonywalnego" usługi Windows

Przechodząc do Administrative Tools > Services można otworzyć okno dialogowe właściwości i wyświetlić Path to executable, ale nie można go zmienić.

Czy istnieje sposób, w jaki użytkownik może zmodyfikować ścieżkę usługi bez konieczności ponownej instalacji aplikacji?

Odpowiedz

151

Istnieje również this approach seen on SuperUser który korzysta z linii poleceń sc zamiast modyfikowania rejestru:

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

Uwaga: przestrzeń po binPath= jest ważne. Można również zapytać bieżącą konfigurację za pomocą:

sc qc <service name> 

Wyświetla wynik podobny do:

[SC] QueryServiceConfig SUKCESU

SERVICE_NAME: ServiceName

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 : [email protected] 
+11

Polecam to podejście w stosunku do bezpośrednich zmian w rejestrze. Wiele ścieżek wymaga cytowanych ciągów znaków, które można wprowadzić w następujący sposób, na przykład za pomocą serwera MS SQL Server: 'sc config mssqlserver binPath =" \ "F: \ SQL DATA \ MSSQL10.MSSQLSERVER \ MSSQL \ Binn \ sqlservr.exe \" -sMSSQLSERVER "' –

+2

Jest to również prawdopodobnie nieco ładniejsze w skrypcie wdrażania niż bezpośrednie podejście modyfikacji rejestru. –

+0

Słodki. Czystsze niż mucking around w reg. ** Uwaga: Będziesz musiał zamknąć i otworzyć serwis.msc, aby zobaczyć zmianę. – yonsk

264

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

+2

Chociaż ostatecznie prowadzi to do rejestru danych, należy wspomnieć, że istnieją specjalne okna Funkcje API do obsługi usługi. Należy unikać bezpośredniej modyfikacji rejestru (ponieważ nie można mieć pewności, co jeszcze zmienia system Windows, modyfikując ścieżkę do pliku exe, f.e.), chyba że jest się ** absolutnie ** pewnym, co robisz. – lospejos

+3

@lospejos "Powinienem wspomnieć, że istnieją specjalne funkcje Windows API do obsługi usługi" ... co by było? –

+3

To jest zła odpowiedź, ponieważ istnieje polecenie sc – Worthy7

0

You może usunąć usługę:

sc delete ServiceName 

Następnie odtwórz usługę.

+1

Nie ma takiej potrzeby, są co najmniej 3 lepsze sposoby na zrobienie tego – Liam

7

Można również zrobić to z 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" 
-1

Trochę głębiej z poleceniem „KN”, jesteśmy w stanie wyodrębnić wszystkie „usługi Nazwa” i dostał all '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] 

'mały' edycja Notepad2 zrobić .. Select 'SERVICE_NAME: ', CTRL+H, click 'Replace All' Imagine that we can do 'Replace All' within 'CMD'

Następnie kontynuować „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] 

it is 'SERVICES on Our Machine' Surowe dane są gotowe do karmienia „przyszłą plik wsadowy” tak wynik jest wyglądać tak poniżej !!!

+ -------------+-------------------------+---------------------------+---------------+--------------------------------------------------+------------------+-----+----------------+--------------+--------------------+ 
| 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 dość łatwiej: D

Wszelkie dobre pomysły na poprawę są mile widziane V^_^

+0

Lub użyj 'sc', który jest znacznie, dużo łatwiejszy i mniej lubię zepsuć. – Liam