使用nssm创建windows服务

NSSM = Non-Sucking Service Manager

"不坑人的服务管理器",它是 Windows 上的一个小工具,能把任何程序注册成 Windows 服务。

历史

为什么叫 "Non-Sucking"?因为Windows自带的srvany把程序注册成服务体验极差,作者 Iain Patterson 在 nssm.cc 首页的原话:

nssm is a service helper which doesn't suck. srvany and other service helper programs suck because they don't handle failure of the application running as a service. If you use such a program you may see a service listed as started when in fact the application has died. nssm monitors the running service and will restart it if it dies. With nssm you know that if a service says it's running, it really is.

  • 初始动机:应用的错误情况未处理,应用死了没人管也不会重启,服务还显示运行中。
  • 后续版本:逐步加入日志捕获、优雅停止、环境变量、GUI。
  • 对标对象:NSSM 真正替代的是 srvany(README 自述 "similar to srvany and cygrunsrv"),以及 cygrunsrv(要装整个 Cygwin)、FireDaemon(商业收费)这类同类工具。
  • 为什么活到现在:微软从 2003 RK 之后就没再更新过 srvany,官方一直没补上这块空缺;NSSM 免费、单文件 300KB、无依赖,所以最后正式版停在 2014(2.24)仍被广泛使用。

特性

特性 说明
支持任意可执行文件 .exe、.bat、.cmd、Python 脚本、Java JAR、Node.js 应用等均可注册为服务
自动重启(守护进程) 程序崩溃后可自动重启,配置重启延迟,这是 sc.exe 和 srvany 所不具备的
I/O 重定向与日志轮转 可将 stdout/stderr 重定向到文件,支持日志文件轮转(rotate),方便排查问题
GUI + 命令行双模式 提供 nssm install <服务名> 的图形化配置界面,也支持纯命令行操作,适合自动化脚本
环境变量自定义 可为服务设置专属环境变量
无需安装 单文件 nssm.exe,绿色免安装,32/64 位均可使用
开源免费 社区活跃,稳定可靠(最后稳定版本 2.24,历经多年验证)

对比

特性 NSSM sc.exe(系统自带) srvany(Resource Kit) WinSW
易用性 ⭐⭐⭐⭐⭐ ⭐⭐ ⭐⭐ ⭐⭐⭐
GUI 配置 ✅ ❌ ❌ ❌
自动重启 ✅ ❌(需额外配置恢复策略) ❌ ✅
日志重定向 ✅ 内置轮转 ❌ ❌ ✅
任意程序支持 ✅ ⚠️(仅原生服务程序) ✅(但配置繁琐) ✅
配置方式 命令行/注册表/GUI 命令行 注册表编辑(繁琐) XML 文件
开源 ✅ 系统内置 ❌ ✅
  • vs sc.exe :sc.exe 只能注册原生 Windows 服务程序,对于普通 EXE/脚本无能为力,且参数配置复杂、不支持日志重定向和自动重启。NSSM 完美弥补了这些不足。
  • vs srvany :srvany 是老牌方案,但需要手动编辑注册表,配置繁琐且容易出错,不支持自动重启和日志管理。NSSM 是它的现代替代品。
  • vs WinSW:WinSW 通过 XML 文件配置,适合需要版本控制的场景(如 CI/CD),但配置不如 NSSM 直观,且需要 .NET 运行时环境。NSSM 更轻量、更适合快速部署。

下载

官网:https://nssm.cc ,就一个 300KB 的 exe,下载后放到 C:\Windows\System32\ 或任意 PATH 目录

命令

分类 命令 语法 中文注释
安装服务(GUI) install nssm install [<servicename>] 打开服务安装图形界面,可选指定服务名称
安装服务(静默) install nssm install <servicename> <app> [<args> ...] 无需确认直接安装服务,指定服务名、应用程序路径及启动参数
编辑服务 edit nssm edit <servicename> 打开服务编辑图形界面,修改已有服务的配置
参数管理 get nssm get <servicename> <parameter> [<subparameter>] 查询(获取)服务的某个参数值,支持子参数
set nssm set <servicename> <parameter> [<subparameter>] <value> 设置(修改)服务的某个参数值,支持子参数
reset nssm reset <servicename> <parameter> [<subparameter>] 重置服务的某个参数为默认值,支持子参数
移除服务(GUI) remove nssm remove [<servicename>] 打开服务卸载图形界面,可选指定服务名称
移除服务(静默) remove nssm remove <servicename> confirm 无需确认直接卸载(移除)指定服务
服务管理 start nssm start <servicename> 启动指定服务
stop nssm stop <servicename> 停止指定服务
restart nssm restart <servicename> 重启指定服务
status nssm status <servicename> 查看指定服务的运行状态
rotate nssm rotate <servicename> 轮转(切换)服务的日志文件,常用于日志滚动

示例:把 Python 静态服务器注册成服务

1、准备目录和文件

index.html

复制代码
<h1> hello nssm </h1>
<p> website run as windows services. </p>

log目录

创建两个空文件

2、安装服务

获取python的安装路径

powershell 复制代码
# 查看并记下 python.exe 的完整路径
PS C:\Users\linxingyang> (Get-Command python).Source
>>
C:\Python311\python.exe

命令行方式

powershell 复制代码
# 使用你的python路径
nssm install demo-http C:\Python313\python.exe "-m http.server 8899"

# 设置工作目录
nssm set demo-http AppDirectory D:\linxingyang\workspace\2026-10-21-nssm-example\webroot 
# 设置日志文件
nssm set demo-http AppStdout D:\linxingyang\workspace\2026-10-21-nssm-example\log\access.log  
nssm set demo-http AppStderr D:\linxingyang\workspace\2026-10-21-nssm-example\log\error.log

GUI方式

1、启动GUI方式安装服务

复制代码
nssm install demo-http

2、在Application标签页填入基本信息

  • python.exe路径
  • webroot
  • 参数

3、在I/O标签页填入日志路径

  • Output,正常日志
  • Error,异常日志

4、点击Install service

3、启动服务

复制代码
# 启动服务(需要管理员权限运行的cmd或者ps执行)
nssm start demo-http

# 查看服务状态
nssm status demo-http

4、浏览器访问

5、删除服务

powershell 复制代码
nssm stop demo-http
nssm remove demo-http confirm
相关推荐
tryCbest1 小时前
宝塔 Windows 面板安装使用
windows·宝塔·服务面板
政在远航1 小时前
看不见的后门:Windows入侵深度排查思路|2026应急响应实操
windows·windows 入侵·windows 入侵排查·漏洞加固
林兴洋2 小时前
使用nssm创建windows服务
windows·后端
桌管小李2 小时前
终端安全一体化实战:AI 审计、行为分析、零信任、防拍照与远程运维全解析
运维·服务器·网络·人工智能·windows·安全·macos
我命由我123454 小时前
Python 开发 - Python 项目部署(Windows 与 Linux)
java·linux·windows·后端·python·java-ee·python3.11
AlfredZhao6 小时前
低配虚拟机安装 Win10 LTSB 2016 跳转机实录
windows
爱吃火鸡面呀1 天前
Spark RDD 行动算子(Action)详解
windows·ajax·spark
dlhto1 天前
Windows 使用 Rufus 制作 AlmaLinux 10.2 启动 U 盘:从 ISO 下载到服务器安装
运维·服务器·windows
小矮强1 天前
输入凭证也没用?Windows 共享文件夹“来宾访问被安全策略阻止”
windows·经验分享