服务的特性
- 允许用户创建可在其自身的 Windows 会话中长时间运行的可执行应用程序。
- 这些服务可在计算机启动时自动启动,可以暂停和重启,并且不显示任何用户界面。
- 这些功能使服务非常适合在服务器上使用,或者需要长时间运行的功能(不会影响在同一台计算机上工作的其他用户)的情况。
NSSM是什么
NSSM是一个Windows上的服务封装程序,它可以将普通exe程序封装成服务,从而在windows下运行,。 NSSM具有以下功能:
- 支持将exe程序封装成服务
- 支持设置登录的账户选项
- 支持设置依赖服务
- 支持IO重定向与文件回转
- 可以自定义环境变量
- 守护被封装的程序,程序异常退出可以自动重启
NSSM如何使用
以win11 & 应用程序以chfs文件共享服务器为例,介绍NSSM的基础使用方法。
chfs的功能以及在windows上的使用请查看历史文章
使用GUI配置文件共享服务器
打开GUI,输入.nssm.exe install后回车,
GUI配置项简介
Application
Path:要启动的程序路径 Startup directory:启动目录,一般为程序所在文件夹 Arguments:程序启动的参数 Service name:服务名称(该名称为服务启动后在任务管理器->服务选项卡中显示的名称,支持中文)
Details
Display name:显示名称(该名称为系统服务(可以通过任务管理器->服务选项卡中的打开服务打开)中显示,支持中文) Description:该服务的描述信息 Startup type:启动类型(自动,自动(延迟启动),手动,禁用)
Log on
登录选项 Local System account:本地系统账号 Allow service to interact with desktop:允许服务和桌面进行交互(显示GUI,但是不推荐使用) This Account:指定登录的账号
Dependencies
依赖 服务启动时所依赖的其他服务或系统资源。通过设置依赖项,NSSM 在启动当前服务之前,先确保其所依赖的其他服务或资源已经启动和可用。
Process
进程优先级设定 Priority:设置服务优先级(实时、高优先级、高于正常、正常、低于正常、低) Affinity:设置是否在所有或者指定的CPU上运行 Console window:是否创建一个新的控制台窗口(对于一些希望读取用户输入的程序来说需要)
Shutdown
停止或关闭服务时的一些操作
默认全部启用即可
Generate Control-C:生成 Control-C 事件并将其发送 Send WM_CLOSE to windows:枚举应用程序创建的所有窗口并向它们发送 WM_CLOSE 消息 Post WM_QUIT to threads:枚举应用程序创建的所有线程并向它们发送WM_QUIT消息 Terminate process:请求操作系统强制终止应用程序

Exit actions
程序退出动作 Throttling:应用运行后如果少于该时间后退出,则会在一定延时后重新启动
第一次重新启动。如果重新启动的应用程序在运行阈值毫秒数之前继续退出,则 nssm 将暂停至少 2000 毫秒,使每次后续故障的暂停时间加倍。暂停的最长时间为 256000 毫秒,大约四分钟。当服务成功运行至少阈值时间时,延迟计数器将重置。
Restart:程序退出后的逻辑(重启、无操作、停止服务、假死)和重启延迟时间
I/O
输入输出重定向 Input(stdin):输入重定向路径 Output(stdout):输出重定向路径 Error(stderr):错误重定向路径
File rotation
文件回转 Replace existing Output and/or Error:应用在启动时会替代已经存在的输出文件以及错误文件 Rotate files:文件回转 Rotate while service is running:当服务运行过程中也会进行文件回转(正常是在服务启动时会进行文件回转) Restrict rotation to files older than 0 seconds:根据时间进行回转 Restrict rotation to files bigger than 0 bytes:根据大小进行回转
Environment
配置自定义环境变量 Replace default environment:替换系统变量
使用GUI配置一个简单的服务
我们以前面讲过的文件共享服务器为例,来配置一个文件共享服务,对应的文件服务器使用参考以往的文章。 其余参数保持默认,点击install service 进入浏览器输入http://127.0.0.1:18080/ 查看对应的日志文件显示 查看服务状态 可以观察到该服务已经成功启动。
常用的命令行参数
xml体验AI代码助手代码解读复制代码Usage: nssm <option> [<args> ...] To show service installation GUI: nssm install [<servicename>] To install a service without confirmation: nssm install <servicename> <app> [<args> ...] To show service editing GUI: nssm edit <servicename> To retrieve or edit service parameters directly: nssm get <servicename> <parameter> [<subparameter>] nssm set <servicename> <parameter> [<subparameter>] <value> nssm reset <servicename> <parameter> [<subparameter>] To show service removal GUI: nssm remove [<servicename>] To remove a service without confirmation: nssm remove <servicename> confirm To manage a service: nssm start <servicename> nssm stop <servicename> nssm restart <servicename> nssm status <servicename> nssm rotate <servicename>