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

通过转到管理工具>服务,您可以打开一个属性对话框并查看可执行文件的路径,但没有办法更改它。

用户是否可以在不重新安装应用程序的情况下修改服务路径?


当前回答

对于像我这样试图修改MongoDB服务以使用身份验证的人,对@CodeMaker的回答进行了轻微修改。

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

具体来说。

Windows下的服务类型 找到MongoDB(或您想更改的服务)并打开该服务,确保停止它。 记下服务名称(不是显示名称) 查找并复制“可执行路径”并复制它。

对我来说,路径是(注意这些符号)

"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"

其他回答

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

再深入一点,使用'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

欢迎提出任何好的改进意见

你也可以用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")

Or:

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

对于像我这样试图修改MongoDB服务以使用身份验证的人,对@CodeMaker的回答进行了轻微修改。

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

具体来说。

Windows下的服务类型 找到MongoDB(或您想更改的服务)并打开该服务,确保停止它。 记下服务名称(不是显示名称) 查找并复制“可执行路径”并复制它。

对我来说,路径是(注意这些符号)

"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"

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

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

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

sc qc <service name>

这将显示类似的输出:

[SC] QueryServiceConfig SUCCESS . SERVICE_NAME:名 类型:10 win32_own_process Start_type: 2 auto_start Error_control: 1 normal BINARY_PATH_NAME: C:\Services\ServiceName LOAD_ORDER_GROUP: 标签:0 DISPLAY_NAME: <显示名称> 依赖关系: SERVICE_START_NAME: user-name@domain-name