2026/9/5 19:06:28

Winboat install.bat 逐行拆解:一个脚本如何装好两个 Windows 服务

Winboat install.bat 逐行拆解:一个脚本如何装好两个 Windows 服务 Winboat install.bat 逐行拆解一个脚本如何装好两个 Windows 服务【免费下载链接】winboatRun Windows apps on Linux with ✨ seamless integration项目地址: https://gitcode.com/GitHub_Trending/wi/winboatWinboat 让你在 Linux 桌面上直接运行 Windows 应用。但有个绕不开的问题跑着跑着 Windows 虚拟机重启了Linux 侧的窗口全掉线手动进虚拟机点半天才能恢复。install.bat 就是为消灭这件事而生的它在 Windows 端把后台服务、开机自启、端口放行一次性装好之后每次开机Linux 侧的应用都能自己连回来。install.bat 执行顺序双击后依次发生的 5 件事先说清楚它在哪运行这个脚本跑在 Windows 虚拟机里素材来自C:\OEM目录WinBoat 部署时把待装文件放进来的约定位置整个流程全自动、不需要你点确认。按顺序看它干了什么。第 1 步导入一份放宽远程桌面的注册表配置 ️接下来这一行做的事是把一份 .reg 文件写进系统注册表reg import %OEM_DIR%\RDPApps.regRDPApps.reg 的内容拆开看就三件事关闭 RemoteApp 白名单——默认 RDP 只允许白名单里的应用关掉后 Winboat 才能远程拉起任意 Windows 程序允许未列入清单的程序——与上一条配套跟随服务器端键盘布局——避免远程会话弹出奇怪的键盘设置不写这步Linux 侧的应用菜单点了也没反应RDP 根本拉不起程序。第 2 步建安装目录先让 Windows Defender 闭嘴建目录本身很简单真正关键的是紧跟的一句 PowerShellpowershell -ExecutionPolicy Bypass -Command Add-MpPreference -ExclusionPath %WB_DIR%安装目录被加进 Defender 的排除列表。为什么服务程序即将被高频读写实时扫描会拖慢启动甚至锁文件导致安装半途失败。先排除、再拷文件顺序不能反。第 3 步把 OEM 目录整体拷进安装位置xcopy %OEM_DIR%\* %WB_DIR%\ /Y /E/Y是覆盖时不再询问/E是连空目录也一并复制。落地的是几样东西server\服务本体、updater\更新服务、guest_tokenLinux↔Windows 之间的身份凭证、以及 nssm.exe——下一位主角。第 4 步用 NSSM 注册并启动两个系统服务 ️这是整个脚本的心脏。NSSM 是一个能把普通 exe 伪装成系统服务的命令行工具——注册之后这个 exe 就出现在服务管理器里能被系统托管、崩溃自动拉起、开机自启。%NSSM% install WinBoatGuestServer %WB_DIR%\server\winboat_guest_server.exe %NSSM% set WinBoatGuestServer Start SERVICE_AUTO_START %NSSM% set WinBoatGuestServer ObjectName NT AUTHORITY\SYSTEM第一行把 exe 注册为服务从此它归 Windows 服务管理器管SERVICE_AUTO_START开机自动启动NT AUTHORITY\SYSTEM 以系统账户运行用户没登录、屏幕锁着也能工作第二个服务WinBoatGuestServerUpdater配一套同样的动作负责后文会提到的更新。第 5 步放行两个端口然后点火netsh advfirewall firewall add rule nameAllow WinBoat API 7148 dirin actionallow protocolTCP localport7148两条 netsh 分别放行 TCP7148API 端口和7150更新端口然后nssm start把两个服务拉起来。脚本最后还挂了一个开机任务schtasks /create /tn TimeSyncTask /sc ONSTART ...time-sync.bat 在每次开机时把虚拟机时钟与宿主机对齐——Windows 虚拟机重启后时钟漂移不同步的话时间戳校验和日志都会乱套。到这里一条时间线走完了调注册表 → 建目录并排除杀毒 → 拷文件 → 注册并启动服务 → 放行端口 → 挂开机任务。之后无论虚拟机怎么重启Linux 侧都会自己连回来。为什么非要把 exe 注册成 Windows 服务 普通 exe 双击运行生命周期跟当前登录用户绑定注销就没了没人登录就不跑。而 WinBoat 的 guest server 要干的事恰恰相反——它必须在开机瞬间、无人登录时就监听 7148 端口等着 Linux 侧来连。服务形态天然满足不依赖任何会话、由系统统一调度和看门。用 NSSM 而不是自己写服务代码是因为一个真正的服务要跟服务控制管理器SCM对话应答暂停/停止、上报状态、崩溃后按策略重启。这些协议自己实现又是一门苦差事NSSM 把 exe 包成合规服务一行 install 搞定。代价是目录里多一个 nssm.exe——它的完整性可以用 nssm.sha1.txt 里的f280858dcfefabc1a9a006a57f6b266a5d1fde8e校验对不上说明文件被动过。放行 7148 端口的逻辑为什么非加不可 Windows 防火墙的入站策略默认是全禁Linux 客户端连不进来十有八九不是服务没起而是端口被拦。所以 netsh 这条规则不是可选项7148对应 Linux 侧 constants.ts 中的GUEST_API_PORT是应用列表、文件访问等所有 API 的入口7150GUEST_UPDATE_PORT更新通道专门给 updater 服务收包用两条规则都限定了protocolTCP只开该开的那两个口其余保持 Windows 默认收紧——放得开、也放得克制。服务起不来 / 端口不通时怎么查按从 Windows 侧往 Linux 侧的顺序排障基本能覆盖所有情况先查服务在不在在 Windows 里执行sc query WinBoatGuestServer。提示服务不存在说明 install.bat 没跑完重新触发即可STATERUNNING则继续下一步。本地健康检查在 Windows 里访问http://127.0.0.1:7148/healthupdater 代码里自己探活用的就是这个地址正常会返回{status:ok}。本机通、Linux 不通 → 查防火墙netsh advfirewall firewall show rule nameAllow WinBoat API 7148规则丢了就重跑第 5 步那条 netsh。服务反复退出 → 看文件完整性检查C:\Program Files\WinBoat\server目录是否齐全缺文件就重跑 install.bat/Y参数会直接覆盖旧文件。哪些变量可以改 WB_DIR默认C:\Program Files\WinBoat理论上可改但服务路径、Defender 排除项全都引用它改了等于推倒重装不折腾最好不动。OEM_DIR固定C:\OEM这是 WinBoat 部署流程的约定输入别动。更新不用改脚本日常升级走第二个服务——updater 监听 7150 接收 zip 包停旧服务、替换文件、重启并健康检查失败自动回滚。注意 updater 本体永不更新它是更新链条的根只能靠整个镜像重做。一句话收尾整条链路里 Linux 侧负责容器、RDP 会话和应用窗口Windows 侧的全部工作浓缩在这 40 来行批处理里常驻服务、开机自启、端口放行一次装齐。虚拟机重启后你的 Linux 桌面还能秒连 Windows 应用功劳都在这条时间线上。【免费下载链接】winboatRun Windows apps on Linux with ✨ seamless integration项目地址: https://gitcode.com/GitHub_Trending/wi/winboat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考