修改Windows服务的“可执行文件路径”


253

我想修改应用程序的路径,但是这样做会中断它,因为该服务仍指向旧位置。

通过转到,Administrative Tools > Services可以打开属性对话框并查看Path to executable,但是无法更改它。

用户无需重新安装应用程序就可以修改服务路径吗?

Answers:


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"
Marc Durdin 2014年

2
在部署脚本中,它也可能比直接注册表修改方法更好。
Niall Connaughton

甜。比在reg中乱糟糟干净。**注意:您需要关闭并打开services.msc才能看到更改。
永斯克

1
如果你得到一个[SC] QueryServiceConfig FAILED 122:sc qc Xsc qc X 1000看到
拉斐尔

13
如果使用PowerShell中的工具,请确保您使用sc.exe,而不是裸身sc
法定命令

292

它涉及编辑注册表,但是可以在中找到服务信息HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services。找到您要重定向的服务,找到ImagePath子项并更改该值。


3
尽管最终这会生成注册表数据,但我应该提到存在一些特殊的Windows API函数来处理该服务。除非您完全确定自己要做什么,否则应避免直接修改注册表(因为您无法确定Windows在修改exe的路径时会发生什么变化,fe)。
lospejos

3
@lospejos“我应该提到存在一些特殊的Windows API函数来处理该服务”……那是什么?
尼克M

如果有人没有在Services.msc中看到更新的服务路径,请尝试在cmd中杀死mmc.exe“ taskkill / F / IM mmc.exe”
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 \ System \ CurrentControlSet \ Services

找到“ Apache2.4 ”,打开文件夹,在右侧找到“ ImagePath ”,打开“ value Data ” 下的“ ImagePath”,输入以下路径:

“ C:\ xampp \ apache \ bin \ httpd.exe” -k运行服务 针对XAMPP的对象指向Apache的安装位置,并在其中找到bin文件夹“ C:(Apache的安装位置)\ bin \ httpd.exe” -k运行服务


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

对于像我这样试图修改MongoDB服务以使用身份验证的任何人,请稍加修改此@CodeMaker的答案。

当我查看“服务”中的“可执行文件的路径”时,执行的行已经包含语音标记。所以我不得不对他的例子做些微修改。

再具体一点。

  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种更好的方法可以做到
Liam

-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更容易,更不容易搞砸的方法。
利亚姆
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.