服务的特性

  • 允许用户创建可在其自身的 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:请求操作系统强制终止应用程序

如何利用NSSM创建Windows服务NSSM是一个Windows上的服务封装程序,它可以将普通exe程序封装成服务,frp  自动启动脚本方法
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>