【Horizon】使用 srvany.exe 将任意程序作为 Windows 服务运行
这篇文章记录如何使用 srvany.exe 和 instsrv.exe,把一个普通程序注册成 Windows 服务。这个方法本身比较老,但在一些兼容性场景下仍然会用到。
适用场景
适合这类情况:
- 某个程序本身不支持以服务方式运行
- 需要开机自启
- 需要通过系统服务统一管理启停
准备文件
先把 srvany.exe 和 instsrv.exe 拷贝到:
C:\Windows\System32\如果过程中出现类似 Unable to find the file at the given path 的报错,也可以尝试放到:
C:\Windows\SysWOW64\注册表配置
打开注册表编辑器 regedit,定位到:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services创建服务项
先创建一个你希望注册的服务名,例如:
ServiceName如果该服务项下面没有 Parameters 子项,就手动创建一个:
Parameters然后在 Parameters 下创建以下字符串值:
Application:要作为服务运行的程序完整路径AppDirectory:程序所在目录AppParameters:程序启动时需要附带的参数
注册服务
配置完成后,用 instsrv 进行注册。
如果文件在 System32:
instsrv ServiceName C:\Windows\System32\srvany.exe如果文件在 SysWOW64:
instsrv ServiceName C:\Windows\SysWOW64\srvany.exe验证结果
注册成功后,打开“服务”管理界面,就可以看到刚才创建的服务项。后续就可以像普通 Windows 服务一样进行启动、停止和设置开机自启。
总结
srvany.exe 的核心思路其实很简单:先用 instsrv 注册一个壳服务,再通过注册表告诉这个壳服务实际要启动哪个程序。虽然它不是新方案,但在需要快速把旧程序挂成服务时仍然很实用。