Зміна "Шлях до виконуваного файлу" служби Windows


253

Я хотів би змінити шлях до своєї програми, але це порушує її, оскільки сервіс все ще вказує на старе місце розташування.

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

Чи може користувач змінити шлях служби без необхідності перевстановлення програми?

Відповіді:


245

Існує також такий підхід, помічений на 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 : user-name@domain-name

24
Я рекомендую такий підхід щодо прямих змін у реєстрі. Для багатьох шляхів потрібні цитовані рядки, які ви можете ввести так, наприклад, з MS SQL Server: sc config mssqlserver binPath= "\"F:\SQL DATA\MSSQL10.MSSQLSERVER\MSSQL\Binn\sqlservr.exe\" -sMSSQLSERVER"
Марк Дурдін

2
Це також, мабуть, трохи приємніше в сценарії розгортання, ніж прямий підхід до зміни реєстру.
Niall Connaughton

Солодке. Чистіше, ніж придумувати в рег. ** Примітка. Вам потрібно буде закрити та відкрити services.msc, щоб побачити зміни.
йонск

1
Якщо ви отримаєте [SC] QueryServiceConfig FAILED 122:після sc qc Xвикористання, sc qc X 1000дивіться це
raphael

13
Якщо ви використовуєте це від PowerShell, переконайтеся, що ви використовуєте sc.exe, а не голийsc
фіат

292

Він передбачає редагування реєстру, але інформацію про службу можна знайти в HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. Знайдіть службу, яку хочете перенаправити, знайдіть ImagePathпідрозділ та змініть це значення.


3
Хоча, нарешті, це призводить до даних реєстру, я мушу зазначити, що існують спеціальні функції API API для роботи з сервісом. Слід уникати прямої модифікації реєстру (оскільки ви не можете бути впевнені, що ще змінюється Windows, коли вона змінює шлях до exe, fe), якщо ви абсолютно не впевнені, що робите.
lospejos

3
@lospejos "Я мушу зазначити, що існують спеціальні функції API API для роботи з сервісом" ... що було б?
Нік М

Якщо хтось не бачить шлях служби оновлений в Services.msc, спробуйте вбити mmc.exe "taskkill / F / IM mmc.exe" у cmd
Drag0nKn1ght

10

Ви також можете це зробити з 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"

3

Відкрийте запуск (win + R), введіть "Regedit.exe", щоб відкрити "Редактор реєстру", перейдіть до

HKEY_LOCAL_MACHINE \ Система \ CurrentControlSet \ Послуги

знайдіть " Apache2.4 ", відкрийте папку, знайдіть " ImagePath " в правій частині, відкрийте "ImagePath", під " значення Data " поставте наступний шлях:

"C: \ xampp \ apache \ bin \ httpd.exe" -k runservice foe XAMPP для інших вказує на місце, де встановлено Apache, а всередині знайдіть папку bin "C: (Місце встановлення Apache) \ bin \ httpd.exe" -k runservice


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"

0

Невелика зміна відповіді на цю відповідь @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"

-2

Ви можете видалити послугу:

sc delete ServiceName

Потім відтворіть послугу.


3
Цього робити не потрібно, є як мінімум 3 кращих способи зробити це
Ліам

-2

Трохи глибше за допомогою команди "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 .. Виберіть "SERVICE_NAME:", CTRL + H, натисніть "Замінити все" Уявіть, що ми можемо зробити "Замінити все" в межах "CMD"

Потім продовжуйте "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 ^ _ ^


Або використовувати те, scщо набагато, набагато простіше і менш люблять накручувати.
Ліам
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.