Как изменить путь к исполняемому файлу для службы Windows?

55

Я хочу изменить путь к исполняемому файлу для службы из командной строки.

Как я могу это сделать?

Я хочу запустить еще один .EXE из пути этого сервиса к исполняемому файлу.

Сэм
источник
Если ответ Дейва не тот, который вам нужен, пожалуйста, воспользуйтесь ссылкой «изменить», чтобы объяснить немного больше?
Арджан

Ответы:

71

Вы можете использовать sc configкоманду, чтобы изменить путь, на который указывает сервис:

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

Это обновит вызванную службу YourServiceNameи изменит запись «Путь к исполняемому файлу» на C:\SomeDirectory\YourFile.EXE. После этого вы захотите перезапустить свой сервис, что вы можете сделать с помощью:

NET STOP YourServiceName & NET START YourServiceName
LittleBobbyTables
источник
Если вы перемещаете конфигурацию MySQL (.ini) на другой диск. Вы можете пропустить внутренние цитаты. Просто оберните всю измененную строку в одну пару двойных кавычек. Переместил мой .ini и папку с данными на диск D: на Win7.
Брайан Боатрайт
1
Как насчет того, когда Path to executableтакже содержит кавычки и другие параметры? Например: "C:\Program Files\CollabNet\Subversion Server\svnserve.exe" --service -r "E:\Repositories" --listen-port "3690"мне, к сожалению, пришлось пройти путь regedit для этого.
Джеймс Скемп
@James - Я почти уверен, что ты сможешь избежать этих персонажей, но мне придется поиграть с этим и вернуться к тебе.
LittleBobbyTables
6
Хотелось бы отметить, что между binpath = и командой требуется свободное место. Тупой, я знаю.
Хлоя
2
Цитаты в binPath можно экранировать обратной косой чертой: \ "
gwyn
16

Вам нужно будет сделать это в реестре:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services

Перейдите к сервису, затем измените имя изображения, чтобы отразить новый путь

Как всегда, сделайте резервную копию системы ПРИОР.

Дейв
источник
Это работало лучше для меня. Служба, которую я менял, имела несколько сложных аргументов.
Джон Аллерс
2

Вы также можете сделать это с помощью 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"
Грег Сансом
источник
1

Ответ, приведенный выше, прекрасно работает, я не могу ответить на него, но, чтобы сложить, в случае, если вам нужно иметь кавычки или другие аргументы в пути, скажем, чтобы исправить уязвимость пути без кавычек в реестре, такую ​​как imagepath, вы может сделать следующее из CMD в качестве администратора:

(например, для C: \ Program Files (x86) \ YourService \ YourProcess.exe)

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

Вы можете сделать следующее из powershell от имени администратора:

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

Это даст вам следующий результат:

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

... кровавые аргументы и экранирование параметров - это кошмар! Надеюсь, это поможет кому-то в будущем.

Маверик Севмонт
источник
0

Вы не можете напрямую редактировать свой путь для выполнения услуги. Для этого вы можете использовать команду 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"
Codemaker
источник
: - Вы выглядите так же, как LittleBobbyTables, если вы можете детализировать разницу, пожалуйста. Чтение Как ответить и тур всегда хороши время от времени.
mic84