我想修改应用程序的路径,但这样做会破坏它,因为服务仍然指向旧的位置。
通过转到Administrative Tools > Services,你可以打开一个属性对话框并查看Path to executable,但没有办法改变它。
Administrative Tools > Services
Path to executable
用户是否可以在不重新安装应用程序的情况下修改服务路径?
它涉及编辑注册表,但服务信息可以在HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services中找到。找到要重定向的服务,找到ImagePath子键并更改该值。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
ImagePath
还有这种方法可以在SuperUser上看到,它使用sc命令行而不是修改注册表:
sc
sc config <service name> binPath= <binary path>
注意:binPath=后面的空格很重要。您还可以使用以下命令查询当前配置:
binPath=
sc qc <service name>
这将显示类似的输出:
[SC] QueryServiceConfig SUCCESS . SERVICE_NAME:名 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
[SC] QueryServiceConfig SUCCESS .
SERVICE_NAME:名
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
您可以删除该服务:
sc delete ServiceName
然后重新创建服务。
你也可以用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"
再深入一点,使用'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编辑.. < / > < / p >
然后,继续'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]
原始数据已经准备好输入“未来批处理文件”,因此结果如下所示!!< / p >
+ -------------+-------------------------+---------------------------+---------------+--------------------------------------------------+------------------+-----+----------------+--------------+--------------------+ | 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
欢迎提出任何好的改进意见
打开运行(win+R),输入“Regedit.exe”,打开“注册表编辑器”,转到
HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \服务
找到"Apache2.4"打开文件夹找到"ImagePath"在右边,打开"ImagePath" 在"值数据"下面输入以下路径:
“C:\xampp\apache\bin\httpd.exe foe XAMPP为其他指向Apache安装的位置,并在其中找到bin文件夹"C:(Apache安装位置)\bin\httpd.exe" -k runservice
不能直接编辑执行服务的路径。你可以使用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"
对于像我这样试图修改MongoDB服务以使用身份验证的人,对@CodeMaker的回答进行了轻微修改。
当我查看“服务”中的“可执行路径”时,执行行已经包含语音标记。所以我不得不对他的例子做了一些小小的修改。
具体来说。
对我来说,路径是(注意这些符号)
"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"
我只是想为Git Bash用户添加,你应该把路径放在单引号' '中
' '
sc config <service name> binPath='<binary path>'
例如sc config MongoDB binPath='"C:\Program Files\MongoDB\Server\5.03\bin\mongod.exe" --config "C:\Program Files\MongoDB\Server\5.03\bin\mongod.cfg" --service --auth'
sc config MongoDB binPath='"C:\Program Files\MongoDB\Server\5.03\bin\mongod.exe" --config "C:\Program Files\MongoDB\Server\5.03\bin\mongod.cfg" --service --auth'
我用Git Bash在Windows 10上更新了服务的路径
使用Invoke-WmiMethod的替代方法是使用更新的CIM cmdlet。这也避免了@($null,$null...)对象的需要,就像在前面的回答中看到的那样。
Invoke-WmiMethod
@($null,$null...)
Get-CimInstance win32_service -Filter "Name='My Service'" | Invoke-CimMethod -MethodName Change -Arguments @{PathName="C:\Program Files\My Service\NewName.exe"}
对于这种情况,最好的方法是卸载应用程序并重新安装应用程序。这是正确的合法途径。
如果安装了Process Hacker,就可以使用它。