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

55

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.

sam
la source
Si la réponse de Dave ne correspond pas à vos besoins, veuillez utiliser le lien "modifier" pour expliquer un peu plus?
Arjan

Réponses:

71

Vous pouvez utiliser la sc configcommande pour changer le chemin d'accès d'un service à:

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

Cela mettra à jour le service appelé YourServiceNameet modifiera l'entrée "Chemin d'accès vers l'exécutable" C:\SomeDirectory\YourFile.EXE. Vous souhaitez ensuite redémarrer votre service, ce que vous pouvez faire avec:

NET STOP YourServiceName & NET START YourServiceName
LittleBobbyTables
la source
Si vous déplacez la configuration MySQL (.ini) sur un autre lecteur. Vous pouvez omettre les guillemets intérieurs. Enroulez simplement la chaîne modifiée dans une seule paire de guillemets. Déplacé mon dossier .ini et mon dossier de données sur le lecteur D: sur Win7.
Brian Boatright
1
Qu'en est-il lorsque Path to executablecontient également des guillemets et d'autres paramètres? Par exemple: "C:\Program Files\CollabNet\Subversion Server\svnserve.exe" --service -r "E:\Repositories" --listen-port "3690"je devais malheureusement suivre la voie regedit pour celui-ci.
James Skemp
@ James - Je suis à peu près sûr que vous pouvez échapper à ces personnages, mais je vais devoir jouer avec ça et vous revenir.
LittleBobbyTables
6
J'aimerais noter qu'il y a un espace requis entre binpath = et la commande. Dumb, je sais.
Chloé
2
Les citations dans binPath peuvent être échappées avec une barre oblique inversée: \ "
gwyn
16

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.

dave
la source
Cela a fonctionné mieux pour moi. Le service que je changeais avait des arguments complexes.
John Allers
2

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"
Greg Sansom
la source
1

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 effectuer les tâches suivantes à partir de 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 à partir de 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.

Maverick Sevmont
la source
0

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"
Codemaker
la source
: - votre apparence est la même que celle de LittleBobbyTables, si vous pouvez détailler la différence, veuillez le faire. Une lecture de How to Answer et de la tournée est toujours bonne de temps en temps.
mic84