Windows Service 安装

一键安装(推荐)

三角色各一个入口脚本:install-server.ps1、install-agent.ps1、install-client.ps1。 以管理员身份打开 PowerShell,先下载再审阅、然后执行:

Set-ExecutionPolicy -Scope Process Bypass
irm https://raw.githubusercontent.com/nnworld/TunnelMesh/main/deploy/install/oneclick/install-agent.ps1 -OutFile install-agent.ps1
notepad .\install-agent.ps1
.\install-agent.ps1

等价的一行式(参数直接跟在 scriptblock 后面,不需要占位名):

& ([scriptblock]::Create((irm https://raw.githubusercontent.com/nnworld/TunnelMesh/main/deploy/install/oneclick/install-agent.ps1))) -Yes -ServerUrl wss://tunnel.example.com/ws/agent -TokenFile C:\secure\agent.token

查参数:Get-Help .\install-agent.ps1 -Detailed 或 .\install-agent.ps1 -?。

脚本会:校验并下载 Release 归档 → 安装 tunnelmesh-<role>.exe 到 C:\Program Files\TunnelMesh → 渲染 C:\ProgramData\TunnelMesh\<role>.yaml → 把 token 等敏感值渲染进 WinSW 服务 XML 的 <env> 块并收紧 ACL → check-config → 注册并启动服务 → 打印日志路径与卸载方式。 重复运行即升级:保留现有配置,旧二进制备份为 <exe>.bak-<UTC时间戳>(只保留最近 1 份)。

敏感值不接受命令行参数,只走 -TokenFile、-SecretEnvFile 或 TUNNELMESH_* 环境变量; 非交互安装加 -Yes,缺必填项时以退出码 3 失败而不是静默用默认值。

WinSW 由脚本自动获取,但只下载 winsw-checksums.txt 中已登记校验和的版本;没有登记条目时脚本中止并提示用 -WinSW <本地路径>。补录条目(需在可访问 github.com Release 的机器上执行):

Invoke-WebRequest -OutFile $env:TEMP\WinSW-x64.exe `
  https://github.com/winsw/winsw/releases/download/v2.12.0/WinSW-x64.exe
(Get-FileHash $env:TEMP\WinSW-x64.exe -Algorithm SHA256).Hash.ToLowerInvariant()
# 把结果按「<version> <arch> <sha256> <asset-name>」追加到
# deploy/install/oneclick/winsw-checksums.txt 并提交

卸载(保留 C:\ProgramData\TunnelMesh 下的配置与 logs\):

.\install-agent.ps1 -Uninstall -Yes

交互项、非交互(CI)示例、镜像源与离线安装、退出码排障表见 一键安装脚本。

手工安装

Windows 使用 WinSW 作为服务包装器。下载与版本校验应由发布流程完成,并选择与 Windows 架构匹配的 WinSW(amd64/arm64),再以管理员 PowerShell 执行:

Set-ExecutionPolicy -Scope Process Bypass
.\tunnelmesh-agent.exe --config C:\ProgramData\TunnelMesh\agent.yaml check-config
.\deploy\install\windows-install.ps1 `
  -Role agent `
  -Binary .\tunnelmesh-agent.exe `
  -Config C:\ProgramData\TunnelMesh\agent.yaml `
  -WinSW C:\Tools\WinSW-x64.exe
Get-Service tunnelmesh-agent

安装 Client:

.\tunnelmesh-client.exe --config C:\ProgramData\TunnelMesh\client.yaml check-config
.\deploy\install\windows-install.ps1 `
  -Role client `
  -Binary .\tunnelmesh-client.exe `
  -Config C:\ProgramData\TunnelMesh\client.yaml `
  -WinSW C:\Tools\WinSW-x64.exe
Get-Service tunnelmesh-client

WinSW 会把 stdout/stderr 滚动写入 C:\Program Files\TunnelMesh\logs,并在进程失败后重启。卸载:

.\deploy\install\windows-uninstall.ps1 -Role agent

配置文件 ACL 只授予 TunnelMesh 服务账户和管理员;不要把 Bearer Token 或本地代理密码放进 PowerShell 历史或服务命令行。Windows 环境变量可通过系统级环境变量或 Secret Manager 注入。