Modificando o "Caminho para o executável" de um serviço do Windows


253

Gostaria de modificar o caminho para o meu aplicativo, mas isso é interrompido porque o serviço ainda aponta para o local antigo.

Ao Administrative Tools > Servicesacessar Path to executable, você pode abrir uma caixa de diálogo de propriedades e exibir a , mas não há como alterá-la.

Existe alguma maneira de um usuário modificar o caminho do serviço sem precisar reinstalar o aplicativo?

Respostas:


245

Há também essa abordagem vista no SuperUser, que usa a sclinha de comando em vez de modificar o registro:

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

Nota: o espaço depois binPath=é importante. Você também pode consultar a configuração atual usando:

sc qc <service name>

Isso exibe uma saída semelhante 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
Eu recomendaria essa abordagem sobre alterações diretas no registro. Muitos caminhos exigem seqüências de caracteres entre aspas, que você pode inserir da seguinte maneira, por exemplo, com o MS SQL Server: sc config mssqlserver binPath= "\"F:\SQL DATA\MSSQL10.MSSQLSERVER\MSSQL\Binn\sqlservr.exe\" -sMSSQLSERVER"
Marc Durdin

2
Também é provavelmente um pouco melhor em um script de implantação do que a abordagem de modificação direta do registro.
Niall Connaughton

Doce. Mais limpo do que mexer no reg. ** Nota: você precisará fechar e abrir o services.msc para ver a alteração.
yonsk

1
Se você receber um [SC] QueryServiceConfig FAILED 122:após sc qc Xo uso sc qc X 1000ver isso
raphael

13
Se usar isso a partir PowerShell, garantir que você use sc.exe, não um nusc
fiat

292

Envolve editar o registro, mas informações sobre o serviço podem ser encontradas em HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. Encontre o serviço que você deseja redirecionar, localize a ImagePathsubchave e altere esse valor.


3
Embora, finalmente, isso leve a dados do registro, devo mencionar que existem funções especiais da API do Windows para lidar com o serviço. A modificação direta do registro deve ser evitada (porque você não pode ter certeza do que mais o Windows está alterando quando modifica o caminho para o exe, fe), a menos que você esteja absolutamente certo do que faz.
lospejos

3
@lospejos "Devo mencionar que existem funções especiais da API do Windows para lidar com o serviço" ... qual seria?
Nick M

Se alguém não vir o caminho do serviço atualizado no Services.msc, tente eliminar o mmc.exe "taskkill / F / IM mmc.exe" no cmd
Drag0nKn1ght

10

Você também pode fazer isso com o 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"

3

Abra Executar (win + R), digite "Regedit.exe", para abrir o "Editor do Registro", vá para

HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services

encontre " Apache2.4 " abra a pasta encontre o " ImagePath " no lado direito, abra "ImagePath" em " value Data " coloque o seguinte caminho:

"C: \ xampp \ apache \ bin \ httpd.exe" -k executa o serviço XAMPP para outros apontar para o local onde o Apache está instalado e dentro de localizar a pasta bin "C: (local instalado do Apache) \ bin \ httpd.exe" -k runservice


0

Você não pode editar diretamente seu caminho para executar um serviço. Para isso você pode usar o comando sc,

SC CONFIG ServiceName binPath= "Path of your file"

Por exemplo:

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

0

Ligeira modificação nesta resposta do @CodeMaker, para quem gosta de mim que está tentando modificar um serviço MongoDB para usar autenticação.

Quando observei o "Caminho para o executável" em "Serviços", a linha executada já continha marcas de fala. Então eu tive que fazer pequenas modificações no seu exemplo.

Para ser específico.

  1. Digite Serviços no Windows
  2. Encontre o MongoDB (ou o serviço que você deseja alterar) e abra o serviço, certificando-se de interrompê-lo.
  3. Anote o nome do serviço (não o nome de exibição)
  4. Procure e copie o "Caminho para o executável" e copie-o.

Para mim, o caminho foi (observe as marcas do discurso)

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

Em um tipo de linha de comando

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

No meu caso, isso foi

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

Você pode excluir o serviço:

sc delete ServiceName

Em seguida, recrie o serviço.


3
Não há necessidade de fazer isso, há pelo menos 3 melhores maneiras de fazer isso
Liam

-2

Um pouco mais fundo com o comando 'SC', somos capazes de extrair todos os 'Serviços' e obter todos os '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]

Faça edição 'pequena' do NOTEPAD2. Selecione 'SERVICE_NAME:', CTRL + H, clique em 'Substituir tudo' Imagine que podemos fazer 'Substituir tudo' dentro de 'CMD'

Em seguida, continue com '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]

é 'SERVIÇOS em nossa máquina' Os dados brutos estão prontos para alimentar o 'arquivo em lote futuro', então o resultado é o seguinte abaixo !!!

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

Mas, HTML será bem mais fácil: D

Quaisquer idéias brilhantes para melhoria são bem-vindas V ^ _ ^


Ou use scmuito, muito mais fácil e menos aparafusar.
Liam
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.