Winboat 自动化部署指南:一键安装与 Windows 服务的无缝集成
【免费下载链接】winboatRun Windows apps on 🐧 Linux with ✨ seamless integration项目地址: https://gitcode.com/GitHub_Trending/wi/winboat
部署 Winboat(在 Linux 上运行 Windows 应用)最容易卡住人的环节在 Windows 一侧:服务要手动注册、重启后失效、防火墙把端口拦掉。Winboat 的做法是把这套动作压进一份自动化部署脚本:跑一遍 install.bat,注册两个 Windows 服务、放行防火墙端口、配置开机自启,一次完成。下文讲清现场发生了什么、为什么这么选,以及坏了怎么查。
一键安装时,后台实际发生了什么
安装向导跑完后,客机的文件会先放到虚拟机内的 C:\OEM 目录,然后由 install.bat 接管,分四步走。
第一步环境准备:导入 RDPApps.reg 打开 RemoteApp 的程序白名单,创建 C:\Program Files\WinBoat 目录并把它加进 Defender 排除列表——不做的话,杀毒软件会在复制时实时扫描客机程序,慢,还会锁文件。接着文件复制:xcopy /Y /E把 server、updater 两个目录连同子目录递归拷进安装目录,缺一个子目录,服务启动时就会找不到可执行文件直接报错。第三步系统配置:用 netsh 加两条入站规则,放行 TCP 7148(客机 API)和 7150(客机更新器),这两个端口被拦,Linux 主机就够不到虚拟机里的服务。最后服务激活:用 nssm 注册 WinBoatGuestServer 与 WinBoatGuestServerUpdater 两个服务、设为自动启动并立即拉起,再登记一个开机时间同步任务;跳过这步,机器开着没问题,重启后一切归零,得手动拉起。
关键命令节选自脚本(原文见 guest_server/install.bat):
"%NSSM%" install WinBoatGuestServer "%WB_DIR%\server\winboat_guest_server.exe" "%NSSM%" set WinBoatGuestServer Start SERVICE_AUTO_START "%NSSM%" set WinBoatGuestServer ObjectName "NT AUTHORITY\SYSTEM" netsh advfirewall firewall add rule name="Allow WinBoat API 7148" dir=in action=allow protocol=TCP localport=7148为什么是这些技术选型
每个选择后面都跟着代价。
用 nssm 封装服务,而不是任务计划。nssm 是一个把任意程序包装成标准 Windows 服务的命令行工具,封装后进程归服务管理器管:自动启动、崩溃重启都现成。代价是系统里多了一个第三方 exe,得校验完整性。自写启动项或任务计划则相反,这些能力全得自己实现。
以 NT AUTHORITY\SYSTEM 账户运行。这是 Windows 内置的系统级账户,权限高但没有密码,不会因密码忘记或修改而卡住。替代方案是普通用户账户,服务会继承该用户的会话状态,密码一改服务就失联。
xcopy /E 递归复制。/E 连空子目录一起拷,/Y 静默覆盖,全程无人值守。换成单文件 copy 命令就得自己遍历子目录,漏一个文件服务就起不来。
防火墙只放 7148。端口定义在 src/renderer/lib/constants.ts:GUEST_API_PORT = 7148,更新器 7150。规则只放行这两个端口而非整段,是最小权限;代价是日后改端口必须两处同步,漏一处就断连。
部署翻车自救手册:服务安装失败、端口冲突怎么改
服务安装失败:先校验 nssm.exe
先排除工具损坏:用certutil -hashfile对 nssm.exe 算 SHA1,和 guest_server/nssm.sha1.txt 记录的值比对,不一致就重新拷贝;再跑nssm version确认工具可用。
端口冲突怎么改
7148 若被别的程序占用,服务起不来监听。必须两处同步改:Linux 侧 constants.ts 里的端口常量,Windows 侧 install.bat 中 netsh 规则的端口。只改一处,两端对不上。
服务启动后无响应:status 加日志定位
先看状态;若已停止,去 Windows 事件查看器(系统日志)找失败记录;若在运行但主机连不上,确认防火墙规则写入成功,再看安装目录下的 winboat_guest_server.log 末尾几行,核对监听端口是否正常。
nssm status WinBoatGuestServer netsh advfirewall firewall show rule name="Allow WinBoat API 7148"要改配置,先动这三个地方
想挪安装目录,只改一处不生效。第一处是 install.bat 顶部的WB_DIR变量——脚本后续路径都引用它,改一处即级联。第二处是已注册的服务:旧工作目录在注册时已写死,要用nssm set WinBoatGuestServer AppDirectory "新路径"手动重指。第三处是排查环境里直接引用安装路径的规则与任务(如时间同步任务)一并修改;脚本自带的两条 netsh 规则只引用端口,不用动。
企业部署可另建独立日志目录,用nssm set WinBoatGuestServer AppStdout "%LOG_DIR%\stdout.log"把服务标准输出重定向到文件,便于集中采集监控。
这个脚本给出去的可迁移方法有三条:把进程封装成服务、生命周期交给系统管理;只开放需要的端口与账户权限;所有操作用无人值守方式完成。其他跨平台项目写部署脚本时可以直接套用。
【免费下载链接】winboatRun Windows apps on 🐧 Linux with ✨ seamless integration项目地址: https://gitcode.com/GitHub_Trending/wi/winboat
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考