使用 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. 解答疑问

针对启动参数那一栏是空白的问题。

🔍 为什么“启动参数”字段为空但服务能正常运行?

  1. NSSM 是服务包装器(Service Wrapper)
    Windows 服务管理器(services.msc)中的 “启动参数”字段仅适用于直接运行可执行文件 的服务。
    NSSM 的工作原理是:
    可执行文件路径:指向 nssm.exe(服务包装器)
    真正要运行的程序和参数:由 NSSM 存储在 Windows 注册表 中,而非服务属性的“启动参数”字段
  2. 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
  1. 服务管理器不显示 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 的值

image

posted @ 2025-12-08 12:39  zrc2024  阅读(30)  评论(0)    收藏  举报