以xp为例,搞定windows下把普通exe程序以服务方式运行,一般指服务类的无ui程序
最近遇到个事。。。。。。
2020年年末了,接到个需求,将某个xp程序弄成后台运行。平时用pm2习惯了,发现node早就不支持xp了。珍爱生命,远离xp。。。
百度谷歌了解了一下其它方法,发现用instsrv
和srvany
结合的方法比较符合口味
先放上下载链接(来源于互联网,安全性未知,目前使用中没发现报毒)
点击下载instsrv和srvany那么开始吧。。。
步骤
下面开始说一下步骤
也可以点击简洁步骤,跳过那些不必要的操作
下载安装
点击下载instsrv和srvany下载后,将包内两个个程序解压到X:\windows\system32
目录,X
代表系统盘,一般为C盘,恰好我搞的这台电脑系统盘就不是C盘。。。
也可用环境变量表,本部分可跳过后文 简洁步骤-下一步
1 | # cmd |
1 | # powershell |
然后可以测试一下,在cmd里输入instsrv
,正常情况下会输出以下,表示下载安装成功
1 | C:\Documents and Settings\zy>instsrv |
注册服务
从上面cmd的输入来看,注册服务的基本语法为 INSTSRV MyService C:\MyDir\DiskService.Exe
其中我们下载的文件中,srvany.exe
就可充当C:\MyDir\DiskService.Exe
由于我们放在系统文件夹system32
中,那么cmd中可以这么表示%windir%\system32\srvany.exe
所以完整命令为:(ServiceName
是你要注册的服务名称,ServiceName
后面还要用到)
完整命令
在cmd中输入
1 | instsrv ServiceName %windir%\system32\srvany.exe |
正常的输出
1 | The service was successfuly added! |
例如:
1 | instsrv my_nginx %windir%\system32\srvany.exe |
改注册表
注册表在该路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[ServiceName]
ServiceName
就是前面提到的服务名称
该路径下的 Parameters
项则为服务的运行参数,默认情况下是没有该项的,可以自行创建
Parameters
目前本人已知有以下几个键值对
- Application
程序路径,即要运行哪个程序 - AppParameters(可选)
程序参数 - AppDirectory(可选)
程序工作目录,即程序在哪个目录运行 - Description(可选)
服务描述
用reg文件注册
将以下内容拷入文本文件,修改里面的中文提示内容为自己服务程序的实际内容,保存并将文件后缀改为.reg
1
2
3
4
5
6Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\修改这里为你的服务名\Parameters]
"Application"="程序执行命令"
"AppParameters"="程序执行参数(可选)"
"AppDirectory"="程序工作目录(可选)"
"Description"="描述(可选)"
例如:
my_nginx.reg
1 | Windows Registry Editor Version 5.00 |
至此,服务配置完成
服务管理
启动、停止、设置自启:
这几步可直接在windows自带的服务程序中使用
按下 win + R
打开的运行中或在cmd中输入services.msc
在名称中找到你的服务名称ServiceName
,点击相应按钮即可
删除服务:
可用INSTSRV
命令解决,从前面的命令输出可见基本语法
1 | INSTSRV MyService REMOVE |
对于有界面的程序
如果程序需要界面,则可在服务属性中打开 允许服务与桌面交互
按下 win + R
打开的运行中或在cmd中输入services.msc
在名称中找到你的服务名称ServiceName
,右键》属性》登录》钩选允许服务与桌面交互
》确定
该部分本人没有测试过
参考
https://docs.appdynamics.com/display/PRO39/Install+the+Standalone+Machine+Agent+as+a+Windows+Service