Modificar la "Ruta al ejecutable" de un servicio de Windows

253

Me gustaría modificar la ruta a mi aplicación, pero al hacerlo se interrumpe porque el servicio todavía apunta a la ubicación anterior.

Al ir a Administrative Tools > Servicespuede abrir un cuadro de diálogo de propiedades y ver el Path to executable, pero no hay forma de cambiarlo.

¿Hay alguna forma de que un usuario pueda modificar la ruta del servicio sin tener que reinstalar la aplicación?

GenericJon
fuente

Respuestas:

245

También se ve este enfoque en SuperUser que usa la sclínea de comando en lugar de modificar el registro:

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

Nota: el espacio después binPath=es importante. También puede consultar la configuración actual usando:

sc qc <service name>

Esto muestra resultados similares a:

[SC] QueryServiceConfig ÉXITO

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
Niall Connaughton
fuente
24
Recomendaría este enfoque sobre los cambios directos del registro. Muchas rutas requieren cadenas entre comillas, que puede ingresar de la siguiente manera, por ejemplo con MS SQL Server: sc config mssqlserver binPath= "\"F:\SQL DATA\MSSQL10.MSSQLSERVER\MSSQL\Binn\sqlservr.exe\" -sMSSQLSERVER"
Marc Durdin
2
También es probablemente un poco mejor en un script de implementación que el enfoque de modificación directa del registro.
Niall Connaughton
Dulce. Más limpio que perder el tiempo en el reg. ** Nota: Deberá cerrar y abrir services.msc para ver el cambio.
yonsk
1
Si obtiene un uso [SC] QueryServiceConfig FAILED 122:posterior, vea estosc qc Xsc qc X 1000
raphael
13
Si usa esto desde PowerShell, asegúrese de usarlo sc.exe, no solosc
fiat
292

Implica editar el registro, pero puede encontrar información de servicio en HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. Encuentre el servicio que desea redirigir, busque la ImagePathsubclave y cambie ese valor.

Matt McHugh
fuente
3
Aunque finalmente esto conduce a datos de registro, debo mencionar que existen funciones especiales de API de Windows para tratar con el servicio. Se debe evitar la modificación directa del registro (porque no puede estar seguro de qué más está cambiando Windows cuando modifica la ruta a exe, fe) a menos que esté absolutamente seguro de lo que hace.
lospejos
3
@lospejos "Debo mencionar que existen funciones especiales de API de Windows para tratar con el servicio" ... ¿cuál sería?
Nick M
Si alguien no ve la ruta de servicio actualizada en Services.msc, intente matar mmc.exe "taskkill / F / IM mmc.exe" en cmd
Drag0nKn1ght
10

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
3

Abra Ejecutar (win + R), escriba "Regedit.exe", para abrir "Editor del Registro", vaya a

HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services

busque " Apache2.4 " abra la carpeta encuentre " ImagePath " en el lado derecho, abra "ImagePath" debajo de " value Data " ponga la siguiente ruta:

"C: \ xampp \ apache \ bin \ httpd.exe" -k runservice foe XAMPP para que otros apunten a la ubicación donde está instalado Apache y dentro de la carpeta bin "C: (ubicación instalada de Apache) \ bin \ httpd.exe" -k runservice

Antony Joseph
fuente
0

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

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
0

Ligera modificación a esta respuesta de @CodeMaker, para cualquier persona como yo que esté tratando de modificar un servicio MongoDB para usar la autenticación.

Cuando miré la "Ruta al ejecutable" en "Servicios", la línea ejecutada ya contenía marcas de voz. Así que tuve que hacer modificaciones menores a su ejemplo.

Ser especifico.

  1. Servicios de tipo en Windows
  2. Busque MongoDB (o el servicio que desea cambiar) y abra el servicio, asegurándose de detenerlo.
  3. Anote el nombre del servicio (no el nombre para mostrar)
  4. Busque y copie la "Ruta al ejecutable" y cópielo.

Para mí el camino era (tenga en cuenta las marcas de voz)

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

En una línea de comando, escriba

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

En mi caso esto fue

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"
John Duskin
fuente
-2

Puedes eliminar el servicio:

sc delete ServiceName

Luego recrear el servicio.

Kim Wilson
fuente
3
No hay necesidad de hacer esto, hay al menos 3 mejores formas de hacerlo
Liam
-2

Un poco más profundo con el comando 'SC', podemos extraer todos los 'Nombre de servicios' y obtener todos los '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]

Realice la edición 'pequeña' de NOTEPAD2. Seleccione 'SERVICE_NAME:', CTRL + H, haga clic en 'Reemplazar todo' Imagine que podemos hacer 'Reemplazar todo' dentro de 'CMD'

Luego, continúe 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]

es 'SERVICIOS en nuestra máquina' ¡Los datos sin procesar están listos para alimentar el 'futuro archivo por lotes', por lo que el resultado es el siguiente a continuación!

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

Pero, HTML será bastante más fácil: D

Cualquier idea brillante para mejorar es bienvenida V ^ _ ^

Rhak Kahr
fuente
O use el sccual es mucho, mucho más fácil y menos gusta arruinarlo.
Liam