一、背景描述
在Windows环境下进行日常的项目开发过程中,有时候需要将bat文件或exe文件程序注册为Windows的服务实现开机自己运行(没有用户登陆,服务在开机后也可以照常运行)、且对于那些没有用户交互界面的exe程序来说只要在后台运行即可,无需在桌面显示该exe程序窗口内容、无需用户手动打开,还可以防止用户不小心关闭该程序。
二、微软官方的SC命令
由于使用微软默认的sc命令启动服务可能会出现【[SC] StartService 失败 1053:服务没有及时响应启动或控制请求。】错误,因此我这里选用Nssm服务封装工具来实现对bat或exe文件作为服务。
序号 | SC命令 | SC命令说明 |
1 | 语法:【sc create 服务名称 start= auto binpath= "需作为服务的文件路径和文件名称" displayname= "在服务管理器上显示的服务名称"】 示例:将E:\SC、NET命令测试\Debug路径下的Test_MontiorSCADAConnNumber.exe程序设置为自动启动且名为testexe服务 (sc create testexe start= auto binpath= "E:\SC、NET命令测试\Debug\Test_MontiorSCADAConnNumber.exe" displayname= "测试可执行程序作为服务") | 创建服务 |
2 | 语法:【sc config 服务名 start=AUTO】 示例:将testexe服务设置为自动启动 (sc config testexe start=AUTO) | 设置服务的启动方式 |
3 | 语法:【sc start 服务名】 或【net start 服务名】 示例:启动testexe服务 (sc start testexe)或(net start testexe) | 启动服务 |
4 | 语法:【sc pause 服务名】 或【net pause 服务名】 示例:暂停testexe服务 (sc pause testexe)或(net pause testexe) | 暂停服务 |
5 | 语法:【sc delete 服务名】 或【net delete 服务名】 示例:删除testexe服务 (sc delete testexe)或(net delete testexe) | 删除服务 |
sc.exe create | Microsoft Learnsc.exe create 命令的参考文章,该命令为注册表和服务控制管理器数据库中的服务创建子项和条目。https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/sc-create使用 SC 配置服务 - Win32 apps | Microsoft LearnWindows SDK 包含命令行实用工具(Sc.exe),可用于查询或修改已安装服务的数据库。 其命令对应于 SCM 提供的函数。 语法如下所示。https://learn.microsoft.com/zh-CN/windows/win32/services/configuring-a-service-using-sc操作系统的 Net 命令 - Windows Server | Microsoft Learn提供有关操作系统上的 Net 命令的一些信息。https://learn.microsoft.com/zh-cn/troubleshoot/windows-server/networking/net-commands-on-operating-systems查看SC命令的语法内容是【打开CMD窗口输入sc】即可,如下图所示:
三、NSSM服务封装工具
3.1、NSSM简介
NSSM是Windows环境下一款免安装的服务管理软件,它可以将bat文件或者exe应用程序封装成服务,封装后的服务可以设置自动启动等操作;并且可以监控程序运行状态,程序异常中断后自动启动,实现守护进程的功能;不仅支持图形界面操作,也完全支持命令行设置。同类型的工具还有微软自己的srvany;不过NSSM更加简单易用,并且功能强大。
NSSM - the Non-Sucking Service Managerhttps://nssm.cc/NSSM下载界面https://nssm.cc/download下载nssm-2.24.ziphttps://nssm.cc/release/nssm-2.24.zip
3.2、将bat或exe文件封装为服务
将下载好的NSSM 2.24解压;根据自己的操作系统位数选择对应的NSSM,比如我这里的操作系统是64位的就选择使用win64文件夹里面的NSSM程序,如下图所示:
序号 | NSSM封装bat或exe文件为服务的命令 | 说明 |
1 | nssm install | 创建封装bat或exe文件为服务的命令,且打开可操作的界面命令方便选择需要封装为服务的文件 |
2 | nssm install 服务名称 "需封装的bat或exe文件路径和名称" | 直接对需要封装的bat或exe文件进行创建服务 比如:我需要将【E:\SC、NET命令测试\重启Default Web Site.bat】文件创建名为【testbatservice】的服务命令为【nssm install testbatservice "E:\SC、NET命令测试\重启Default Web Site.bat"】 |
3 | nssm start 服务名称 | 启动指定的服务 比如:【nssm start testbatservice】 |
4 | nssm pause 服务名称 | 暂停服务 比如:【nssm pause testbatservice】 |
5 | nssm restart 服务名称 | 重启服务 比如:【nssm restart testbatservice】 |
6 | nssm stop 服务名称 | 停止服务 比如:【nssm stop testbatservice】 |
7 | nssm remove 服务名称 | 删除服务 比如:【nssm remove testbatservice】 |
NSSM服务封装工具的完整命令行内容https://nssm.cc/commands
①必须使用超级管理员打开命令行(CMD)界面,否则启动服务的时候会失败。
②进入NSSM程序路径(比如:我这里的NSSM路径是:【E:\迅雷下载\nssm-2.24\win64】)
--比如:我这里的NSSM路径是【E:\迅雷下载\nssm-2.24\win64】,那么我进入该路径的操作如下:
E:
cd E:\迅雷下载\nssm-2.24\win64
③打开NSSM的窗体安装bat文件作为服务
④启动我们刚才创建的服务(比如我这里刚创建的服务名是:testbatservice)
⑤重启服务 (比如我这里刚创建的服务名是:testbatservice)
⑥停止服务(比如我这里刚创建的服务名是:testbatservice)
⑦移除服务