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

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

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

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

13 ответов

Решение

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

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

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

sc qc <service name>

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

[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

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

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

Откройте Run(win+R), введите "Regedit.exe", чтобы открыть "Редактор реестра", перейдите к

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services

найдите "Apache2.4", откройте папку и найдите "ImagePath" с правой стороны, откройте "ImagePath" под "значением Data" и введите следующий путь:

"C: \ xampp \ apache \ bin \ httpd.exe" -k runservice foe XAMPP для других указывает на местоположение, где установлен Apache, и внутри находит папку bin "C:(Apache установленное местоположение)\bin\httpd.exe" -k runservice

Небольшая модификация этого ответа @CodeMaker для всех, кто вроде меня, пытается изменить службу MongoDB для использования аутентификации.

Когда я посмотрел на "Путь к исполняемому файлу" в "Службах", выполненная строка уже содержала речевые метки. Поэтому мне пришлось внести небольшие изменения в его пример.

Чтобы быть конкретным.

  1. Тип службы в Windows
  2. Найдите MongoDB (или службу, которую вы хотите изменить) и откройте службу, обязательно остановив ее.
  3. Запишите имя службы (не отображаемое имя)
  4. Найдите и скопируйте "Путь к исполняемому файлу" и скопируйте его.

Для меня путь был (обратите внимание на знаки речи)

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

В командной строке введите

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

В моем случае это было

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"

Вы не можете напрямую редактировать свой путь для выполнения услуги. Для этого вы можете использовать команду sc,

SC CONFIG ServiceName binPath= "Path of your file"

Например:

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

мне просто захотелось добавить для пользователей Git Bash путь в одинарные кавычки ' ' как в

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

например, в sc config MongoDB binPath='"C:\Program Files\MongoDB\Server\5.03\bin\mongod.exe\" --config \"C:\Program Files\MongoDB\Server\5.03\bin\mongod.cfg\" --service -- auth"'

это сработало для меня, чтобы обновить путь к службе с помощью Git Bash в Windows 10

Если у вас установлен Process Hacker, вы можете его использовать.

Альтернатива использованию Invoke-WmiMethodзаключается в использовании более новых командлетов CIM .Это также позволяет избежать необходимости @($null,$null...)объект, как видно из предыдущего ответа.

Get-CimInstance win32_service -Filter "Name='My Service'" | Invoke-CimMethod -MethodName Change -Arguments @{PathName="C:\Program Files\My Service\NewName.exe"}

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

Шаг 1. Откройте редактор реестра Windows. Вы можете либо ввести «regedit» в программе «Выполнить», либо выполнить поиск «regedit» в меню «Пуск».

Шаг 2: Разверните -> HKEY_LOCAL_MACHINE; Развернуть -> СИСТЕМА; Развернуть -> CurrentControlSet; Развернуть -> Услуги

Шаг 3. Найдите службу, которую хотите изменить, и нажмите на нее. С правой стороны вы найдете все свойства метаданных службы, включая ImagePath. Щелкните правой кнопкой мыши свойство метаданных ImagePath, и вы сможете изменить путь в поле данных значения.

Спасибо

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

sc delete ServiceName

Затем воссоздайте сервис.

Лучший способ для этого сценария — удалить приложение и переустановить его. Это правильный законный путь.

Чуть глубже с помощью команды "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^_^

Другие вопросы по тегам