用Windows服务运行任意程序

昨天把mantis缺陷跟踪系统在办公室里搭了一套,批处理启动nginx+php+mysql。

后来发现服务器必须登录才行,一注销就把nginx给关闭了,看来只能添加到系统服务里了。

一开始用[sc create nginx binPath= c:/opt/start.bat],服务是添加进去了,但总是无法启动,后来分析一下,应该是服务程序要用SCxxxx等API函数与windows交互,所以启动失败(也有可能已经运行了,在任务管理器看不到,没给windows返回成功状态所以显示失败)。 后来在网上找到一个srvany.exe的程序,应该就是一个空壳服务程序,把服务添加成它: sc create nginx binPath= c:/opt/srvany.exe 然后在注册表里添加以下内容

====================================================

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/nginx/Parameters]

"Application"="c://opt//start.bat"

"AppParameters"=""

"AppDirectory"="c://opt//"

====================================================

这样启动服务时srvany会去指定路径调用程序,也能和windows正常交互服务的状态了。

不过后来发现一个问题,在控制台的服务管理中,停止该服务的话只能停止srvany.exe,不会停止它启动的程序,以后有空自己做一个srvany程序吧。

原文地址:https://www.cnblogs.com/chaos77/p/4066235.html