程序注册为Windows服务
为什么要注册服务?🙂在Windows环境下进行日常的项目开发过程中,有时候需要将bat文件或exe文件程序注册为Windows的服务实现开机自己运行(没有用户登陆,服务在开机后也可以照常运行)、且对于那些没有用户交互界面的exe程序来说只要在后台运行即可,无需在桌面显示该exe程序窗口内容、无需用户手动打开,还可以防止用户不小心关闭该程序。
常用的方法有两种,分别为使用微软官方的SC
命令和使用第三方工具NSSM
,具体使用方法如下:
微软官方的SC命令
- SC命令说明表
管理员身份打开cmd命令行输入对应命令即可执行相关操作,执行完通常会有信息反馈。
命令类别 | 命令语法 | 语法示例 | 作用说明 |
---|---|---|---|
创建服务 | sc create 服务名称 start=auto binpath=“文件路径” displayname=“显示名称” | sc create testexe start=auto binpath=“D:\nssm\test.exe” displayname=“testexe” | 将D盘中指定路径和名称的exe设置为自启动,名称为testexe的服务 |
设置自启 | sc config 服务名 start=auto | sc config testexe start=auto | 将testexe服务设置为自动启动 |
启动服务 | sc start 服务名 | sc start testexe | 启动testexe服务 |
暂停服务 | sc pause 服务名 | sc pause testexe | 暂停testexe服务 |
删除服务 | sc delete 服务名 | sc delete testexe | 删除testexe服务 |
NSSM服务封装工具
-
说明:NSSM是Windows环境下一款免安装的服务管理软件,它可以将bat文件或者exe应用程序封装成服务,封装后的服务可以设置自动启动等操作;并且可以监控程序运行状态,程序异常中断后自动启动,实现守护进程的功能;不仅支持图形界面操作,也完全支持命令行设置。同类型的工具还有微软自己的srvany;不过NSSM更加简单易用,并且功能强大。
-
下载:官网下载最新版,当前最新版为nssm-2.24.zip
-
安装:免安装,将下载好的压缩包解压到指定路径下,例如D:\nssm\nssm.exe
-
使用:
以管理员身份打开cmd
控制台,cd定位到nssm程序路径下,使用命令nssm install <服务名>
服务名是你要创建的服务名称。在弹出的设置页面Application选项卡中选择程序所在路径
在Details选项卡中设置显示名和服务描述,根据需要选择Startup type(默认为Automatic-自动)
在I/O选项卡中设置日志输出路径和对应文件名(一般自己创建)
点击install service执行后会看到Service “WsService” installed successfully!提示,此时就可以在服务列表中看到了。
Startup type-启动类型:Automatic-自动 | Automatic(Delayed Start)-自动(延迟启动) | Manual-手动 | Disable-禁用
还可以在I/O选项卡中设置日志输出: Input(stdin):输入日志位置 (可不设) | Output(stdout):输出日志位置 | Error(stderr):错误日志位置
其它命令:启动服务:nssm start <服务名> | 停止服务:nssm stop <服务名> | 重启服务:nssm restart <服务名> | 删除服务:nssm remove <服务名> (2.0+版本可用nssm remove <服务名> confirm 避免确认窗口) | 编辑服务:nssm edit <服务名>
其它移除服务方法
执行方法前,需要先停止服务。
- 方法一:使用cmd命令(管理员),执行
sc queryex type=service state=all
列出所有服务,执行sc delete 服务名称
移除服务,成功后立即删除。 - 方法二:使用PoserShell命令(管理员),执行
Get-Service
列出所有服务,执行sc delete 服务名称
移除服务,无提示即成功,重启系统后生效。 - 方法三:通过注册表,Win+R打开运行,输入
regedit
打开注册表,定位到计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
路径,找到你的服务名称,选择删除即可,重启系统后生效。使用此方法也可以修改服务的一些配置项(如果你清晰用途的话)。