web-dev-qa-db-fra.com

Comment changer le chemin en exécutable pour un service Windows?

Je souhaite modifier le chemin d'accès à l'exécutable pour un service à partir de la ligne de commande.

Comment puis je faire ça?

Je veux exécuter un autre .exe du chemin de ce service à l'exécutable.

53
sam

Vous pouvez utiliser la commande sc config pour modifier le chemin d'accès d'un service à:

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

Cela mettra à jour le service appelé YourServiceName et modifiera l'entrée "Path to Executable" en C:\SomeDirectory\YourFile.EXE. Vous souhaitez ensuite redémarrer votre service, ce que vous pouvez faire avec:

NET STOP YourServiceName & NET START YourServiceName
66

Vous devrez le faire dans le registre:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

Accédez au service, puis modifiez le nom de l'image pour refléter le nouveau chemin.

Comme toujours, faites une sauvegarde du système AVANT.

17
dave

Vous pouvez également le faire avec 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")

Ou:

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

La réponse fournie ci-dessus fonctionne très bien, je ne peux pas y répondre, mais pour résumer, au cas où vous auriez besoin de guillemets ou d'autres arguments dans le chemin, par exemple, pour réparer une vulnérabilité de chemin non-cité dans le registre, comme un chemin d'image peut faire ce qui suit depuis CMD en tant qu'administrateur:

(par exemple, pour C:\Program Files (x86)\YourService\YourProcess.exe)

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

vous pouvez faire ce qui suit depuis powershell en tant qu'administrateur:

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

Ceux-ci vous donneront le résultat suivant:

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

... les arguments sanglants et les paramètres qui s'échappent sont un cauchemar! J'espère que cela aidera quelqu'un dans le futur.

1
Maverick Sevmont

Vous ne pouvez pas éditer directement votre chemin pour exécuter un service. Pour cela, vous pouvez utiliser la commande sc,

Ouvrez votre invite de commande en tant qu'administrateur puis tapez la commande suivante,

SC CONFIG ServiceName binPath= "Path of your file"

Par exemple:

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