¿Cómo cambiar la ruta al ejecutable para un servicio de Windows?

55

Quiero cambiar la ruta al ejecutable para un servicio desde la línea de comandos.

¿Cómo puedo hacer eso?

Quiero ejecutar otro .EXE desde la ruta de ese servicio al ejecutable.

sam
fuente
Si la respuesta de Dave no es la que necesita, utilice el enlace "editar" para explicar un poco más.
Arjan

Respuestas:

71

Puede usar el sc configcomando para cambiar la ruta a la que apunta un servicio:

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

Esto actualizará el servicio llamado YourServiceNamey cambiará la entrada "Ruta al ejecutable" C:\SomeDirectory\YourFile.EXE. Después querrá reiniciar su servicio, lo que puede hacer con:

NET STOP YourServiceName & NET START YourServiceName
LittleBobbyTables
fuente
Si está moviendo la configuración de MySQL (.ini) a otra unidad. Puedes dejar de lado las comillas internas. Simplemente envuelva toda la cadena modificada en un solo par de comillas dobles. Moví mi .ini y carpeta de datos a D: conducir en Win7.
Brian Boatright
1
¿Qué pasa cuando el Path to executabletambién contiene comillas y otros parámetros? Por ejemplo: "C:\Program Files\CollabNet\Subversion Server\svnserve.exe" --service -r "E:\Repositories" --listen-port "3690"lamentablemente tuve que tomar la ruta regedit para esta.
James Skemp
@James: estoy bastante seguro de que puedes escapar de esos personajes, pero tendré que jugar con ellos y responderte.
LittleBobbyTables
66
Me gustaría señalar que hay un espacio requerido entre binpath = y el comando. Tonto, lo sé.
Chloe
2
Las citas en binPath se pueden escapar con una barra invertida: \ "
gwyn
16

Tendrá que hacer eso en el registro:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services

Navegue al servicio, luego modifique el nombre de la imagen para reflejar la nueva ruta

Como siempre, haga una copia de seguridad del sistema ANTES.

Dave
fuente
Esto funcionó mejor para mí. El servicio que estaba cambiando tenía algunos argumentos complejos.
John Allers
2

También puedes hacerlo 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"
Greg Sansom
fuente
1

La respuesta proporcionada anteriormente funciona muy bien, no puedo responderla, pero para agregar, en caso de que necesite comillas u otros argumentos en la ruta, digamos que para corregir una vulnerabilidad de ruta no citada en el registro, como una ruta de imagen, usted puede hacer lo siguiente desde CMD como administrador:

(por ejemplo, para C: \ Archivos de programa (x86) \ YourService \ YourProcess.exe)

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

puedes hacer lo siguiente desde powershell como administrador:

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

Estos le darán el siguiente resultado:

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

... argumentos sangrientos y parámetros de escape son una pesadilla! Espero que esto ayude a alguien en el futuro.

Maverick Sevmont
fuente
0

No puede editar directamente su ruta para ejecutar un servicio. Para eso puedes usar el comando sc,

Abra su símbolo del sistema como administrador y luego escriba el siguiente comando,

SC CONFIG ServiceName binPath= "Path of your file"

P.ej:

sc config MongoDB binPath="I:\Programming\MongoDB\MongoDB\bin\mongod.exe --config I:\Programming\MongoDB\MongoDB\bin\mongod.cfg --service"
Codemaker
fuente
: - se ve igual que LittleBobbyTables, si puede detallar la diferencia, hágalo. Una lectura de Cómo responder y un recorrido siempre es buena de vez en cuando.
mic84