使用 NSSM(Non-Sucking Service Manager) 将各种服务当作系统服务,即使注销用户也能运行|以 Syncthing 为例
测试场景:window11系统
1. NSSM 下载 + 安装
# 1. 下载并解压 NSSM
$TempDir = "$env:TEMP\nssm_install"
$NssmZip = "$TempDir\nssm.zip"
New-Item -ItemType Directory -Path $TempDir -Force | Out-Null
Invoke-WebRequest -Uri "https://nssm.cc/release/nssm-2.24.zip" -OutFile $NssmZip
Expand-Archive -Path $NssmZip -DestinationPath $TempDir -Force
$NssmExe = Get-ChildItem $TempDir -Recurse -Include "nssm.exe" | Where-Object { $_.Directory.Name -match "win64" } | Select-Object -First 1
2. 以Syncthing 为例,注册为服务
使用everything搜索nssm.exe,把它复制到下面的路径就好。
下面的命令在管理员 PowerShell 中运行,使用win+x+a进入
# === 1. 设置路径 ===
$NssmPath = "D:\Workflow\AutoScripts\nssm\nssm.exe" # 请根据你实际解压位置修改
$SyncthingExe = "D:\Program Files\Syncthing\syncthing-windows-amd64-v2.0.11\syncthing.exe"
$SyncthingHome = "C:\Users\admin\.config\syncthing"
# === 2. 验证文件存在 ===
if (-not (Test-Path $NssmPath)) {
Write-Error "NSSM 未找到:$NssmPath"
exit 1
}
if (-not (Test-Path $SyncthingExe)) {
Write-Error "Syncthing 未找到:$SyncthingExe"
exit 1
}
# === 3. 安装服务(关键:必须在管理员 PowerShell 中运行)===
& $NssmPath install Syncthing $SyncthingExe "--no-browser" "-home=$SyncthingHome"
# === 4. 配置服务 ===
& $NssmPath set Syncthing Start SERVICE_AUTO_START
& $NssmPath set Syncthing AppDirectory "D:\Program Files\Syncthing\syncthing-windows-amd64-v2.0.11"
# === 5. 启动服务 ===
& $NssmPath start Syncthing
Write-Host "✅ Syncthing 服务已成功安装并启动!" -ForegroundColor Green
3.验证
-
使用
win+r打开运行,输入services.msc→ 查看是否存在 Syncthing 服务
![image]()
-
浏览器访问
http://127.0.0.1:11021/,应能打开 Syncthing UI -
即使注销 Windows 用户,服务仍应运行
4. 解答疑问
针对启动参数那一栏是空白的问题。
🔍 为什么“启动参数”字段为空但服务能正常运行?
- NSSM 是服务包装器(Service Wrapper)
Windows 服务管理器(services.msc)中的 “启动参数”字段仅适用于直接运行可执行文件 的服务。
NSSM 的工作原理是:
可执行文件路径:指向 nssm.exe(服务包装器)
真正要运行的程序和参数:由 NSSM 存储在 Windows 注册表 中,而非服务属性的“启动参数”字段 - NSSM 的配置存储位置
NSSM 将 syncthing.exe 及其参数存储在注册表中:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Syncthing\Parameters
在这个注册表路径下,你会看到:
Application:D:\Program Files\Syncthing\...\syncthing.exe
AppParameters:--no-browser --home=C:\Users\k\AppData\Local\Syncthing
- 服务管理器不显示 NSSM 内部参数
Windows 服务管理器 无法解析 NSSM 的注册表配置,因此“启动参数”字段显示为空
但这不影响服务运行,因为 NSSM 会自行从注册表读取参数
✅ 验证配置是否正确
方法 1:用 NSSM 命令查看配置
D:\Workflow\AutoScripts\nssm\nssm.exe get Syncthing AppParameters
应输出:
--no-browser --home=C:\Users\k\AppData\Local\Syncthing
方法 2:查看注册表
按 Win+R → 输入 regedit
检查 Application 和 AppParameters 的值



浙公网安备 33010602011771号