NSSM 完整命令行教程,把 exe 注册成 Windows 服务
前置准备
- 下载 nssm,分 32/64位,exe程序是64位就用64位nssm
- 把
nssm.exe放到一个纯英文路径(禁止中文、空格) - 打开 管理员身份 CMD / PowerShell,必须管理员,否则安装服务失败
常用路径示例:
D:\tools\nssm\nssm.exe
一、核心全套命令
1. 安装服务(最关键)
nssm install 服务名
示例
nssm install BoschExportService
执行后会弹出图形配置窗口
- Path:选择你的exe程序完整路径
例:D:\project\export\ExportTool.exe - Working directory(工作目录):会自动填充exe所在文件夹,不用改
- Arguments:启动参数,没有就空着
- Service name 服务名称、Display name(Windows服务显示名)、描述随意填写
不想弹出GUI、纯命令行静默安装,往下看静默部署
二、纯命令行静默安装(无弹窗,推荐脚本部署)
::1 设置服务名称
set svcName=BoschExportService
::2 exe完整路径
set exePath=D:\project\export\ExportTool.exe
nssm install %svcName% "%exePath%"
:: 设置服务描述
nssm set %svcName% Description "博世导出后台服务"
:: 设置启动类型:SERVICE_AUTO_START 自动;SERVICE_DEMAND_START手动
nssm set %svcName% Start SERVICE_AUTO_START
启动、停止、重启服务 cmd
::启动
nssm start BoschExportService
::停止
nssm stop BoschExportService
::重启
nssm restart BoschExportService
查询服务状态
nssm status BoschExportService
修改exe路径
nssm set BoschExportService Application "D:\new\ExportTool.exe"
卸载删除服务(先停止再移除)
nssm stop BoschExportService
nssm remove BoschExportService confirm
三、常用 NSSM set 配置项(命令行)
# 设置程序启动参数
nssm set 服务名 Arguments "-mode runserver"
# 标准输出日志 stdout 日志文件
nssm set 服务名 Stdout "D:\logs\out.log"
# 错误日志
nssm set 服务名 Stderr "D:\logs\err.log"
# 程序崩溃后自动重启
nssm set 服务名 Restart on
# 崩溃重启延迟毫秒,3秒=3000
nssm set 服务名 RestartDelay 3000
四、完整一键部署bat脚本(直接复制,改路径即可)
新建 install_service.bat,右键以管理员运行
@echo off
chcp 65001
set svcName=BoschExportService
set NSSM=D:\tools\nssm\nssm.exe
set EXE=D:\project\export\ExportTool.exe
set LOG=D:\project\export\logs
md %LOG%
::安装服务
%NSSM% install %svcName% "%EXE%"
%NSSM% set %svcName% Description "博世Excel导出后台程序"
%NSSM% set %svcName% Start SERVICE_AUTO_START
%NSSM% set %svcName% Stdout "%LOG%\run.log"
%NSSM% set %svcName% Stderr "%LOG%\error.log"
%NSSM% set %svcName% Restart on
%NSSM% set %svcName% RestartDelay 2000
::启动服务
%NSSM% start %svcName%
pause
卸载脚本 uninstall.bat
@echo off
set svcName=BoschExportService
set NSSM=D:\tools\nssm\nssm.exe
%NSSM% stop %svcName%
%NSSM% remove %svcName% confirm
pause
五、踩坑要点
- 全部路径禁止中文、空格、特殊符号,极易启动失败
- 运行 nssm 必须管理员终端
- exe 程序本身路径固定,不要后续挪动exe文件夹,否则服务启动失败
- 程序需要读写文件,工作目录一定要配置正确,相对路径会出错
- 日志开启,exe闪退、报错全部写到 err.log,方便排查
- 区分 32/64‑bit nssm 和你的exe架构一致
六、Windows服务原生命令(可搭配使用)
sc query BoschExportService
net start BoschExportService
net stop BoschExportService
如果你需要,我可以给你一份 nssm 所有参数清单、以及WPF/exe后台服务常见坑。
直接结论
直接覆盖替换同名exe,不需要重新安装、注册 NSSM 服务
下面把原理、注意事项、踩坑点一次性讲清楚
原理
NSSM‑Windows 服务注册表只保存你 exe 的完整绝对路径,并不把 exe 打包、缓存进服务里面。
只要文件路径不变、exe名字不变,NSSM 每次启动服务时,都会读取该路径下最新版 exe。
exe替换操作步骤(标准流程)
- 先停止服务
nssm stop BoschExportService
- 直接覆盖旧 exe,替换成新版本(文件名、存放文件夹路径一丝不动)
- 启动服务
nssm start BoschExportService
服务就运行新版程序。
什么时候必须重新配置/重装服务
触发下面任意一种情况就要改配置,不用重装服务,只修改nssm程序路径:
- exe改名
- exe挪动到别的文件夹
# 只更新程序路径即可,不用install重装
nssm set BoschExportService Application "D:\xxx\new\ExportTool.exe"
高频坑点(很关键)
- 替换exe之后程序依旧跑旧版本
- 服务没有真正停止,exe进程还驻留占用文件;文件被进程占用你覆盖失败,文件没更新成功
- 任务管理器手动结束你的exe进程,再覆盖
- 相对路径问题
NSSM 的工作目录是exe所在目录;只要路径没变就不受影响 - 配置文件、json、日志
升级exe别覆盖你的配置文件,更新时只替换主exe - 权限
如果新版exe新增读写文件夹权限,服务登录身份权限不足会启动失败
最简升级bat脚本
@echo off
nssm stop BoschExportService
::这里执行拷贝覆盖exe
copy /y "D:\new\ExportTool.exe" "D:\project\export\ExportTool.exe"
nssm start BoschExportService
pause
总结
- 路径、文件名不变:覆盖exe → 停启服务即可,无需重装服务
- 路径或者文件名改动:只用 nssm set 修改Application路径就行

1298

被折叠的 条评论
为什么被折叠?



