Home

【Horizon】使用 srvany.exe 将任意程序作为 Windows 服务运行

这篇文章记录如何使用 srvany.exeinstsrv.exe,把一个普通程序注册成 Windows 服务。这个方法本身比较老,但在一些兼容性场景下仍然会用到。

适用场景

适合这类情况:

  • 某个程序本身不支持以服务方式运行
  • 需要开机自启
  • 需要通过系统服务统一管理启停

准备文件

先把 srvany.exeinstsrv.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 注册一个壳服务,再通过注册表告诉这个壳服务实际要启动哪个程序。虽然它不是新方案,但在需要快速把旧程序挂成服务时仍然很实用。

技术分享