Изменение "Путь к исполняемому файлу" службы Windows

Я хотел бы изменить путь к моему приложению, но это нарушает его, потому что служба все еще указывает на старое местоположение.

Перейдя в Administrative Tools > Services, вы можете открыть диалог свойств и просмотреть Path to executable, но изменить его невозможно.

Можно ли каким-либо образом изменить путь к службе, не переустанавливая приложение?

Ответ 1

Он включает в себя редактирование реестра, но служебную информацию можно найти в HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. Найдите службу, которую вы хотите перенаправить, найдите подраздел ImagePath и измените это значение.

Ответ 2

Существует также этот подход, наблюдаемый на SuperUser, который использует командную строку sc вместо изменения реестра:

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

Примечание: пространство после binPath= важно. Вы также можете запросить текущую конфигурацию, используя:

sc qc <service name>

Отображает вывод, похожий на:

[SC] QueryServiceConfig УСПЕХ

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 : [email protected]

Ответ 3

Вы также можете сделать это с помощью 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")

Или:

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

Ответ 4

Вы можете удалить службу:

sc delete ServiceName

Затем заново создайте службу.

Ответ 5

Немного глубже с командой "SC", мы можем извлечь все "Имя службы" и получить все "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]

Сделайте небольшое редактирование NOTEPAD2.. Выберите Представьте, что мы можем сделать

Затем перейдите к '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]

это Сырые данные готовы к загрузке "будущего командного файла", поэтому результат будет выглядеть следующим образом:

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

Но HTML будет намного проще: D

Любые яркие идеи для улучшения приветствуются V ^ _ ^