2011-08-25 11 views
192

Vorrei modificare il percorso della mia applicazione, ma interromperlo perché il servizio punta ancora alla vecchia posizione.Modifica del "Percorso dell'eseguibile" di un servizio Windows

Andando a Administrative Tools > Services è possibile aprire una finestra di dialogo delle proprietà e visualizzare Path to executable, ma non è possibile modificarlo.

È possibile che un utente possa modificare il percorso del servizio senza dover reinstallare l'applicazione?

risposta

151

C'è anche this approach seen on SuperUser che utilizza la linea sc comando anziché modifica del Registro:

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

Nota: lo spazio dopo binPath= è importante. È anche possibile interrogare la configurazione corrente utilizzando:

sc qc <service name> 

Questo visualizza un output simile a:

[SC] QueryServiceConfig SUCCESSO

SERVICE_NAME: NomeServizio

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

Consiglierei questo approccio sulle modifiche dirette del registro. Molti percorsi richiedono stringhe tra virgolette, che è possibile immettere come segue, ad esempio con MS SQL Server: 'sc config mssqlserver binPath =" \ "F: \ SQL DATA \ MSSQL10.MSSQLSERVER \ MSSQL \ Binn \ sqlservr.exe \" -sMSSQLSERVER "' –

+2

Probabilmente è anche un po 'più bello in uno script di distribuzione rispetto all'approccio di modifica del registro diretto. –

+0

Dolce. Più pulito del mucking in reg. ** Nota: per vedere la modifica è necessario chiudere e aprire services.msc. – yonsk

264

Comporta la modifica del registro, ma le informazioni di servizio sono disponibili in HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. Trova il servizio che desideri reindirizzare, individuare la sottochiave ImagePath e modificare tale valore.

+2

Anche se alla fine questo porta al Registro dei dati, vorrei ricordare che esistono di Windows speciale Funzioni API per gestire il servizio. La modifica diretta del registro dovrebbe essere evitata (perché non si può essere sicuri di quale altra cosa Windows stia cambiando quando modifica il percorso di exe, ad esempio) a meno che non siate ** assolutamente ** sicuri di ciò che si fa. – lospejos

+3

@lospejos "Dovrei menzionare che esistono funzioni speciali dell'API di Windows per gestire il servizio" ... quale sarebbe? –

+3

Questa è una cattiva risposta dato che c'è il comando sc – Worthy7

0

È può cancellare il servizio:

sc delete ServiceName 

Quindi ricreare il servizio.

+1

Non c'è bisogno di farlo, ci sono almeno 3 modi migliori per farlo – Liam

7

si potrebbe anche fare con 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") 

Oppure:

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

Un po 'più in profondità con il comando 'SC', siamo in grado di estrarre tutti 'Servizi Nome' e ottenuto 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] 

Do 'piccola' editing notepad2 .. 0.123. Imagine that we can do 'Replace All' within 'CMD'

Quindi, continuare con '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' dati grezzi è pronto per l'alimentazione di 'file batch futuro' in modo che il risultato è simile a questo qui sotto !!!

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

Ma, HTML sarà piuttosto facile: D

qualche idea brillante per il miglioramento sono i benvenuti V^_^

+0

Oppure usa' sc' che è molto, molto più facile e meno piacere a rovinare. – Liam

Problemi correlati