Modifica del "Percorso dell'eseguibile" di un servizio Windows


253

Vorrei modificare il percorso della mia applicazione, ma così facendo si rompe perché il servizio punta ancora alla vecchia posizione.

Andando a Administrative Tools > Servicespuoi aprire una finestra di dialogo delle proprietà e visualizzare il Path to executable, ma non c'è modo di cambiarlo.

Esiste un modo in cui un utente può modificare il percorso del servizio senza dover reinstallare l'applicazione?

Risposte:


245

C'è anche questo approccio visto su SuperUser che utilizza la scriga di comando invece di modificare il registro:

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

Nota: lo spazio dopo binPath=è importante. Puoi anche eseguire una query sulla configurazione corrente usando:

sc qc <service name>

Questo mostra un output simile a:

[SC] QueryServiceConfig SUCCESS

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 : user-name@domain-name

24
Consiglierei questo approccio rispetto alle modifiche dirette al registro. Molti percorsi richiedono stringhe tra virgolette, che è possibile inserire come segue, ad esempio con MS SQL Server: sc config mssqlserver binPath= "\"F:\SQL DATA\MSSQL10.MSSQLSERVER\MSSQL\Binn\sqlservr.exe\" -sMSSQLSERVER"
Marc Durdin

2
Probabilmente è anche un po 'più bello in uno script di distribuzione rispetto all'approccio diretto alla modifica del registro.
Niall Connaughton,

Dolce. Più pulito di muck in reg. ** Nota: è necessario chiudere e aprire services.msc per visualizzare la modifica.
yonsk,

1
Se hai un [SC] QueryServiceConfig FAILED 122:post sc qc Xutilizzo, sc qc X 1000vedi questo
raphael

13
Se lo usi da PowerShell, assicurati di usarlo sc.exe, non un nudosc
fiat

292

Implica la modifica del registro, ma è possibile trovare informazioni sul servizio HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. Trova il servizio che desideri reindirizzare, individua la ImagePathsottochiave e modifica quel valore.


3
Anche se alla fine questo porta a dati di registro, dovrei menzionare che esistono speciali funzioni API di Windows per gestire il servizio. La modifica diretta del registro dovrebbe essere evitata (perché non si può essere sicuri di cos'altro sta cambiando Windows quando modifica il percorso di exe, fe) a meno che non si sia assolutamente sicuri di ciò che si fa.
Lospejos,

3
@lospejos "Dovrei menzionare che esistono speciali funzioni API di Windows per gestire il servizio" ... quale sarebbe?
Nick M,

Se qualcuno non vede il percorso del servizio aggiornato in Services.msc, prova a uccidere mmc.exe "taskkill / F / IM mmc.exe" in cmd
Drag0nKn1ght,

10

Puoi anche farlo 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")

O:

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

3

Apri Esegui (win + R), digita "Regedit.exe", per aprire "Editor del Registro di sistema", vai a

HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services

trova " Apache2.4 " apri la cartella trova " ImagePath " nella parte destra, apri "ImagePath" sotto " valore Dati " inserisci il seguente percorso:

"C: \ xampp \ apache \ bin \ httpd.exe" -k corre il servizio per XAMPP per altri punti verso la posizione in cui è installato Apache e al suo interno trova la cartella "C: (posizione installata Apache) \ bin \ httpd.exe" -k corre servizio


0

Non è possibile modificare direttamente il percorso per eseguire un servizio. Per questo puoi usare il comando sc,

SC CONFIG ServiceName binPath= "Path of your file"

Per esempio:

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

0

Leggera modifica a questa risposta di @CodeMaker, per chiunque come me che sta cercando di modificare un servizio MongoDB per utilizzare l'autenticazione.

Quando ho guardato il "Percorso dell'eseguibile" in "Servizi", la riga eseguita conteneva già dei segni vocali. Quindi ho dovuto apportare piccole modifiche al suo esempio.

Essere specifici.

  1. Digitare servizi in Windows
  2. Trova MongoDB (o il servizio che desideri modificare) e apri il servizio, assicurandoti di interromperlo.
  3. Prendi nota del nome del servizio (non del nome visualizzato)
  4. Cerca e copia il "Percorso dell'eseguibile" e copialo.

Per me il percorso era (notare i segni del discorso)

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

In un tipo di riga di comando

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

Nel mio caso questo è stato

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

Puoi eliminare il servizio:

sc delete ServiceName

Quindi ricreare il servizio.


3
Non è necessario farlo, ci sono almeno 3 modi migliori per farlo
Liam,

-2

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

Esegui un 'piccolo' editing di NOTEPAD2. Seleziona "SERVICE_NAME:", CTRL + H, fai clic su "Sostituisci tutto" Immagina di poter fare "Sostituisci tutto" in "CMD"

Quindi, continua 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]

è "SERVIZI sulla nostra macchina" I dati non elaborati sono pronti per l'alimentazione del "file batch futuro", quindi il risultato è simile al seguente !!!

+ -------------+-------------------------+---------------------------+---------------+--------------------------------------------------+------------------+-----+----------------+--------------+--------------------+
| 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 l'HTML sarà molto più semplice: D

Eventuali brillanti idee per il miglioramento sono benvenute V ^ _ ^


Oppure usa ciò scche è molto, molto più facile e meno piace rovinare.
Liam,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.