Skip to content

NSSM:将可执行文件注册为 Windows 服务

nssm 是一个免费、开源、轻量的 Windows 服务注册程序,可以将任何可执行文件注册为可靠的 Windows 服务, 虽然也有其他同类型的工具(比如微软官方的 srvany),但是远没有 nssm 简单易用

下载安装

官网下载压缩包: https://nssm.cc/download ,解压后能看到里面有 win32/win64,根据你系统位数选择

nssm_download

设置系统环境变量

便于使用,你可以将它加入到系统环境变量中:

打开系统属性-环境变量,将 win32/win64 目录添加到 Path 中,现在你就可以在任意位置使用 nssm 命令了

这不是必须的,你若不设置那就只能进入到 nssm.exe 所在目录去运行命令,后面使用命令行时会很难受

基本用法

服务注册

通过运行 nssm install <服务名> 唤出 GUI 配置面板,你可以在这个面板中轻松完成配置

nssm_gui

注册一个最基础的服务仅需要配置 Application

  • Path: 你的可执行程序
  • Startup Directory: 启动目录,相当于 cmd 中先 cd 到此目录下再运行程序
  • Arguments: 程序参数

nssm_install_success

完成后你就可以在 Windows 服务 中找到你刚刚注册的这个服务了

命令行式配置

你可以直接在命令行中操作,无需唤出配置面板 nssm install <servicename> <app> [<args> ...]

但是这只能注册一个最基础的服务,需要配置其他属性请看 服务配置

服务配置

nssm edit <servicename> 唤出 GUI 配置面板

nssm dump <servicename> 显示该服务的配置清单

nssm get <servicename> <parameter> [<subparameter>] 查询某一项配置的当前值

nssm set <servicename> <parameter> [<subparameter>] <value> 设置或修改配置项

nssm reset <servicename> <parameter> [<subparameter>] 删除指定参数(或子参数),恢复默认值

服务删除

nssm remove [<servicename>] 唤出 GUI 删除面板,需要手动点击确认删除

nssm remove <servicename> confirm 在命令行直接删除,无确认动作

服务管理

nssm start <servicename> 启动服务,相当于执行 Windows 服务的“启动”操作

nssm stop <servicename> 停止服务,nssm 会按照配置项 Shutdown 中方式来退出进程,默认先尝试优雅退出(发送 Ctrl+C、WM_CLOSE、WM_QUIT 信号),等待超时将会强制终止进程

nssm restart <servicename> 重启服务(停止并启动)

nssm status <servicename> 查看服务当前状态

nssm rotate <servicename> 触发日志轮转,仅当配置了 I/O 时生效

完整配置

  • Service name: 服务名称(只能使用英文字母、数字、下划线,不能有空格)

  • Application: 应用配置

    • Path: 需要托管为服务的可执行程序路径
    • Startup directory: 程序启动时的工作目录,相当于 cmd 中先执行 cd 到此目录 再运行程序。可避免程序在错误路径下读不到配置文件或资源
    • Arguments: 启动时的命令行参数,如 -config config.yaml
  • Details: 服务详细信息

    • Display name: 服务在 服务管理器 (services.msc) 中显示的名称,可含空格与中文
    • Description: 服务的简要描述,显示在 服务属性
    • Startup type: 服务启动方式
      • Automatic 自动随系统启动
      • Automatic (Delayed) 延迟启动
      • Manual 手动启动
      • Disabled 禁用服务
  • Log on:

    • Local System account: 使用本地系统帐户 (LocalSystem) 运行,权限高,但无法访问网络共享资源
    • Allow service to interact with desktop: 允许服务显示窗口
    • This account: 指定自定义用户(例如 .\Administrator 需要填写密码),适用于需要访问网络共享或域资源的程序
  • Dependencies: 列出启动前必须存在的其他服务,系统会按依赖顺序启动服务,若缺少依赖服务则启动失败

  • Process: 进程配置

    • Priority: 程序运行优先级:Real-timeHigh、NormalLow,通常保持默认 Normal
    • Affinity: 限制使用的 CPU 核心
    • Console window: 是否显示控制台窗口,勾选后程序会弹出窗口,服务模式下通常不勾选
  • Shutdown: 停止行为,定义当系统停止服务时,nssm 如何优雅关闭程序

    • Generate Control-C: 向控制台程序发送 Ctrl+C 信号,请求正常退出(类似 Ctrl+C 停止)
    • Send WM_CLOSE to windows: 向窗口程序(GUI)发送关闭消息,要求其自行退出
    • Post WM_QUIT to threads: 向所有线程发送 WM_QUIT 消息(少见,用于 GUI 程序)
    • Terminate process: 强制终止进程
  • Exit actions: 退出行为,定义程序崩溃或退出时 nssm 的反应

    • Throttling: 设置两次重启之间的最小时间间隔(毫秒),防止程序反复崩溃造成死循环
    • Restart: 程序退出后的行为,一般要么重新运行,要么停止服务
      • Restart application 默认项,程序退出后,nssm 会重新启动被托管的应用程序
      • No action (srvany compatible) 几乎不再使用(仅为兼容 srvany)
      • Stop service (oneshot mode) 单次运行模式,程序运行结束后服务自动停止
      • Fake crash (pre-Vista) 旧版系统兼容模式(Windows XP / 2003)
  • I/O: 配置程序的输入输出流

    • Input(stdin): 从文件读取输入,一般留空
    • Output(stdout): 程序的标准输出日志路径
    • Error(stderr): 程序的错误输出日志路径
  • File rotation: 日志轮转,用于控制 nssm 自动轮转日志文件

    • Replace existing Output and/or Error files: 若勾选,则每次启动服务时覆盖旧日志文件。若不勾选,则会追加
    • Rotate files: 是否启用日志轮转,需要配置轮转机制
  • Environment: 为该服务单独设置环境变量,不影响系统环境

最后更新于:

如有转载请标注本站原文地址