exe文件借助NSSM作为window系统服务运行

NSSM 完整命令行教程,把 exe 注册成 Windows 服务

前置准备

  1. 下载 nssm,分 32/64位,exe程序是64位就用64位nssm
  2. nssm.exe 放到一个纯英文路径(禁止中文、空格)
  3. 打开 管理员身份 CMD / PowerShell,必须管理员,否则安装服务失败

常用路径示例:D:\tools\nssm\nssm.exe


一、核心全套命令

1. 安装服务(最关键)

nssm install 服务名

示例

nssm install BoschExportService

执行后会弹出图形配置窗口

  1. Path:选择你的exe程序完整路径
    例:D:\project\export\ExportTool.exe
  2. Working directory(工作目录):会自动填充exe所在文件夹,不用改
  3. Arguments:启动参数,没有就空着
  4. 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

五、踩坑要点

  1. 全部路径禁止中文、空格、特殊符号,极易启动失败
  2. 运行 nssm 必须管理员终端
  3. exe 程序本身路径固定,不要后续挪动exe文件夹,否则服务启动失败
  4. 程序需要读写文件,工作目录一定要配置正确,相对路径会出错
  5. 日志开启,exe闪退、报错全部写到 err.log,方便排查
  6. 区分 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替换操作步骤(标准流程)

  1. 先停止服务
nssm stop BoschExportService
  1. 直接覆盖旧 exe,替换成新版本(文件名、存放文件夹路径一丝不动)
  2. 启动服务
nssm start BoschExportService

服务就运行新版程序。

什么时候必须重新配置/重装服务

触发下面任意一种情况就要改配置,不用重装服务,只修改nssm程序路径:

  1. exe改名
  2. exe挪动到别的文件夹
# 只更新程序路径即可,不用install重装
nssm set BoschExportService Application "D:\xxx\new\ExportTool.exe"

高频坑点(很关键)

  1. 替换exe之后程序依旧跑旧版本
    • 服务没有真正停止,exe进程还驻留占用文件;文件被进程占用你覆盖失败,文件没更新成功
    • 任务管理器手动结束你的exe进程,再覆盖
  2. 相对路径问题
    NSSM 的工作目录是exe所在目录;只要路径没变就不受影响
  3. 配置文件、json、日志
    升级exe别覆盖你的配置文件,更新时只替换主exe
  4. 权限
    如果新版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路径就行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值