正务库

nssm,一个可以把任何exe注册为系统服务的利器

时间:2个月前   游览量:43    标签: 任何    可以    注册    一个    系统    服务    exe   

在windows下把一个exe可执行文件注册为系统服务有很多种方法,常用的有sc命令、instsrv+srvany以及本文重点介绍的nssm。

nssm,一个可以把任何exe注册为系统服务的利器 网络技术 第1张

 


引言

这阵子为单位编写了一个小工具,作用是禁止Windows系统访问因特网,只允许使用内部的局域网。分发到用户电脑里时,要实现开机自启动和防止人工杀进程。一开始我采用写注册表的方式实现自启动,但是这有两个不足:

①容易被杀软拦截,杀软对自启动的第三方工具非常敏感。

②隐蔽性不高。注册表自启动的项目虽然不会出现在开始菜单的“启动”里,但是在任务管理器的“启动”里能看的到(虽然我实现了守护注册表的功能,是没办法轻易删掉注册表键值的,不过一些有洁癖的用户还是会想方设法把它去掉)。

所以最终放弃了注册表自启动方式,改为把程序注册为系统服务。


三种方式简介

(1)sc命令

这是Windows自带的命令,可以把exe注册为系统服务,命令格式也很明晰,结构如下:

sc create SVN binpath= "exe程序的完整路径" displayname= "服务名称" start= auto


其中:

sc create:是sc注册服务命令
SVN : 是你给这个服务起的名字
binpath : 是exe文件的路径和命令参数
displayname :是服务的别名
start :是否自动启动

可以说这是一个非常绿色环保的命令,不需要借助第三方工具就能轻松实现。但是sc命令有一个致命的缺点,这个缺点就是被它注册的这个exe程序必须符合系统服务的规范,否则是无法启动的。我只是一个老菜鸟,而且根本没时间研究系统服务的规范,所以只能拜拜了。

(2)神器instsrv+srvany

这是一对神仙组合,提取自Windows2003的tool kits,有将近20年了,但是目前依然能用。

instsrv用于注册一个系统服务,srvany用于加载该服务引用的第三方exe程序。

操作命令如下:

instsrv.exe 要注册的服务名称 c:abcsrvany.exe

这只是第一步,然后还要在注册表里新增Parameters子键,并添加AppDirectory和AppParameters两个键值,具体的大家自行search。

由于该组合过于古老,在Win10上出现了兼容性问题,具体点说,就是instsrv注册服务时添加的srvany绝对路径是不带双引号的,如下:

c:abcsrvany.exe

而Win10能识别的格式是这样的:

"c:abcsrvany.exe"

区别就在于一对双引号,这让我花了1整天时间才弄明白,坑死了。

但上面这个问题不是致命的,致命的是,该神仙组合不能守护进程。轻轻一点,我们想要运行在后台的程序就拜拜了。虽然我的程序有守护组件能重启主程序,但是这个加载器的自身功能还是弱了一些。自己用没问题,发布到用户手里还是下面的nssm靠谱一些。

(3)nssm,全称non-sucking server manager

NSSM是一个服务封装程序,它可以将普通exe程序封装成服务,使之像windows服务一样运行。它几乎可以把任何exe封装成系统服务(有界面和对话框的不适合这么做),还能守护这个第三方程序不被杀掉,而且还有图形操作界面,方便小白使用。

nssm,一个可以把任何exe注册为系统服务的利器 网络技术 第2张

 


nssm的简单范例

nssm的命令行操作非常简单,两步就能加载应用程序了。下面以把D:abc.exe注册成系统服务为例。

①封装第三方应用为系统服务:

nssm install 服务名称 D:abc.exe

执行完这一步,nssm会自动在注册表中建立Parameters子键,并添加AppDirectory和AppParameters两个键值,所以如果没有其他特殊需求,这一句就搞定了。

nssm,一个可以把任何exe注册为系统服务的利器 网络技术 第3张

 


nssm,一个可以把任何exe注册为系统服务的利器 网络技术 第4张

 

②启动第三方程序

nssm start 服务名称

tips:上面提到的”服务名称“四个字,最好是使用英文或数字,这样不会有兼容性问题。

 

其他常用的命令有:

修改服务名称:nssm set DisplayName 用于用户查看的服务名称

修改服务描述:nssm set Description 这里跟一段该服务的文字描述,支持中文

删除某个服务:nssm remove 服务名称 confirm

其他更多参数的使用,请参阅官方网页:

https://nssm.cc/commands