windows下把exe以服务方式运行

以xp为例,搞定windows下把普通exe程序以服务方式运行,一般指服务类的无ui程序

最近遇到个事。。。。。。

2020年年末了,接到个需求,将某个xp程序弄成后台运行。平时用pm2习惯了,发现node早就不支持xp了。珍爱生命,远离xp。。。

百度谷歌了解了一下其它方法,发现用instsrvsrvany结合的方法比较符合口味

先放上下载链接(来源于互联网,安全性未知,目前使用中没发现报毒)

点击下载instsrv和srvany

那么开始吧。。。

步骤

下面开始说一下步骤

也可以点击简洁步骤,跳过那些不必要的操作

简洁步骤-下一步

下载安装

点击下载instsrv和srvany

下载后,将包内两个个程序解压到X:\windows\system32目录,X代表系统盘,一般为C盘,恰好我搞的这台电脑系统盘就不是C盘。。。

也可用环境变量表,本部分可跳过后文 简洁步骤-下一步

1
2
# cmd
echo %windir%\system32
1
2
# powershell
("{0}{1}" -f $env:windir,"\system32")

然后可以测试一下,在cmd里输入instsrv,正常情况下会输出以下,表示下载安装成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
C:\Documents and Settings\zy>instsrv
Installs and removes system services from NT

INSTSRV <service name> (<exe location> | REMOVE)
[-a <Account Name>] [-p <Account Password>]

Install service example:

INSTSRV MyService C:\MyDir\DiskService.Exe
-OR-
INSTSRV MyService C:\mailsrv\mailsrv.exe -a MYDOMAIN\joebob -p foo

Remove service example:

INSTSRV MyService REMOVE

注册服务

从上面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
2
3
4
5
6
The service was successfuly added!

Make sure that you go into the Control Panel and use
the Services applet to change the Account Name and
Password that this newly installed service will use
for its Security Context.

简洁步骤-下一步

例如:

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
6
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\修改这里为你的服务名\Parameters]
"Application"="程序执行命令"
"AppParameters"="程序执行参数(可选)"
"AppDirectory"="程序工作目录(可选)"
"Description"="描述(可选)"

例如:

my_nginx.reg

1
2
3
4
5
6
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\my_nginx\Parameters]
"Application"="nginx.exe"
"AppParameters"="-c nginx.conf"
"AppDirectory"="x:\xxx\"
"Description"="nginx"

至此,服务配置完成

服务管理

启动、停止、设置自启:

这几步可直接在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

https://blog.csdn.net/lys1220/java/article/details/90052262

0%