win11中将node项目或exe注册为系统服务需用nssm工具:一、下载nssm并以管理员身份运行;二、通过gui或命令行配置服务路径、启动目录及参数;三、在services.msc中启动并设置故障恢复与日志输出。

在Win11上把Node项目或任意EXE程序注册为系统服务,是为了让它开机自启、后台静默运行、不随远程桌面断开而终止,还能通过services.msc统一管理。直接双击exe或用node server.js启动,一旦关闭命令行窗口或用户登出,进程就立刻消失,这对需要长期值守的API服务、监控脚本、自动化工具来说完全不可用。
准备NSSM并验证管理员权限
从NSSM官网(https://nssm.cc/download)下载最新版nssm-2.24.zip,解压后进入win64子目录,找到nssm.exe;右键→“以管理员身份运行”该文件,若弹出命令行窗口并显示Usage信息,说明可执行;【必须用管理员权限运行后续所有步骤,否则注册服务会失败且无明确报错】。
将nssm.exe复制到系统路径下更方便调用,例如放到C:\Windows\System32\,这样后续在任意位置都能直接敲nssm命令。
用NSSM GUI向导注册EXE为服务
在资源管理器地址栏输入cmd,回车打开命令行,输入nssm install MyServiceName,其中MyServiceName是你想给服务起的名字(不能含空格和特殊字符,如MyNodeApp);窗口弹出后,在“Path”栏点击浏览,选中你要托管的.exe文件(比如D:\mytool\backup.exe);“Startup directory”填该exe所在目录(D:\mytool);“Service name”会自动同步为MyServiceName;“Display name”可写成“我的自动备份工具”,“Description”填一句说明;点击“Install service”按钮完成注册。
这一步操作起来很简单,但注意:如果exe依赖当前目录下的配置文件或DLL,就必须正确填写“Startup directory”,否则服务启动时会因找不到依赖而闪退,日志里只显示“failed to start”。
用NSSM命令行注册Node项目为服务
Node项目不能直接注册——nssm无法识别.js文件,必须包装成可执行入口。先确保你的项目有package.json,且main字段指向入口文件(如server.js),再确认已全局安装pm2或使用node自带方式;推荐用node直接托管,避免引入额外进程管理器造成嵌套失控。
方法一:用node.exe作为服务主程序
在命令行中执行:
nssm install MyNodeApi → 弹窗中“Path”填C:\Program Files\nodejs\node.exe,“Startup directory”填D:\projects\my-api,“Arguments”填D:\projects\my-api\server.js
方法二:用批处理封装(更可控)
新建start.bat,内容为:@echo off & cd /d "D:\projects\my-api" & node server.js > logs\output.log 2>&1
保存后,在NSSM安装界面“Path”指向该bat文件,“Startup directory”仍填D:\projects\my-api;【bat必须用ANSI或UTF-8无BOM编码保存,否则中文路径下会报“系统找不到指定文件”】。
关键配置与启动验证
第一步:启动服务
按Win+R输入services.msc → 找到刚注册的服务(如MyNodeApi)→ 右键“启动”。
第二步:检查是否真在运行
打开任务管理器→“详细信息”页,筛选node.exe或你的exe名称;同时查看服务状态是否为“正在运行”,而非“已启动又停止”。
第三步:强制触发一次崩溃测试
在服务属性→“恢复”选项卡中,将“第一次失败”“第二次失败”“后续失败”全部设为“重新启动服务”,并勾选“如果服务失败,运行此程序:”,填入C:\Windows\System32\cmd.exe,参数填/c echo %DATE% %TIME% >> C:\logs\crash.log;这样下次node进程意外退出,服务会自动拉起,并记录时间戳供排查。
第四步:确认日志输出位置
NSSM默认把stdout/stderr重定向到服务配置里的“Output”路径,建议显式设置:在services.msc中右键服务→属性→“Settings”页,勾选“Append to existing log file”,并在“Output”栏填D:\projects\my-api\logs\nssm-out.log;不设这个,日志会丢进黑洞,debug时只能靠Windows事件查看器→Windows日志→系统→筛选来源为NSSM的错误事件。











