修改Windows服务的"可执行路径"

Gen*_*Jon 244 windows windows-services

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

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

有没有办法用户可以修改服务路径而无需重新安装应用程序?

小智 288

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

  • 虽然最终这会导致注册表数据,但我应该提到有特殊的Windows API函数来处理服务.应该避免直接注册表修改(因为你无法确定Windows在修改exe,fe的路径时还会改变什么)除非你绝对不确定你做了什么. (3认同)
  • @lospejos"我应该提到有特殊的Windows API函数来处理服务"......这会是什么? (3认同)
  • 这是一个糟糕的答案,因为有sc命令 (3认同)
  • 如果有人没有在 Services.msc 中看到更新的服务路径,请尝试在 cmd 中杀死 mmc.exe“taskkill /F /IM mmc.exe” (2认同)

Nia*_*ton 234

在SuperUser上也可以看到这种方法,它使用sc命令行而不是修改注册表:

sc config <service name> binPath= <binary path>
Run Code Online (Sandbox Code Playgroud)

注意:后面的空格binPath=很重要.您还可以使用以下方法查询当前配置:

sc qc <service name>
Run Code Online (Sandbox Code Playgroud)

这显示类似于的输出:

[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
Run Code Online (Sandbox Code Playgroud)

  • 我会建议这种方法直接改变注册表.许多路径需要带引号的字符串,您可以按如下方式输入,例如使用MS SQL Server:`sc config mssqlserver binPath ="\"F:\ SQL DATA\MSSQL10.MSSQLSERVER\MSSQL\Binn\sqlservr.exe \"-sMSSQLSERVER "` (21认同)
  • 如果在PowerShell中使用它,请确保使用`sc.exe`,而不是裸`sc` (8认同)
  • 在部署脚本中,它可能比直接注册表修改方法更好一些. (2认同)

小智 11

打开运行(win+R),输入“Regedit.exe”,打开“注册表编辑器”,转到

HKEY_LOCAL_MACHINE\系统\CurrentControlSet\Services

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

"C:\xampp\apache\bin\httpd.exe" -k runservice foe XAMPP 对于其他人则指向 Apache 的安装位置并在其中找到 bin 文件夹“C:(Apache 安装位置)\bin\httpd.exe” -k 运行服务


Gre*_*som 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")
Run Code Online (Sandbox Code Playgroud)

要么:

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


Joh*_*kin 5

对于像我这样尝试修改 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
Run Code Online (Sandbox Code Playgroud)

在命令行中输入

sc config MongoDB binPath= "<Modified string with \" to replace ">"
Run Code Online (Sandbox Code Playgroud)

就我而言,这是

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"
Run Code Online (Sandbox Code Playgroud)