尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

43行批处理,两个后台服务:Winboat install.bat 完整详解

发布时间:2026/9/6 17:02:18

资讯中心
01
ARTICLE

43行批处理,两个后台服务:Winboat install.bat 完整详解

43行批处理,两个后台服务:Winboat install.bat 完整详解
43行批处理两个后台服务Winboat install.bat 完整详解【免费下载链接】winboatRun Windows apps on Linux with ✨ seamless integration项目地址: https://gitcode.com/GitHub_Trending/wi/winboat在 Linux 上装好 Winboat 之后界面会带着你走容器、镜像这些流程但真正让 Windows 客端活起来的是藏在C:\OEM挂载目录下的一个批处理文件install.bat。它是 Winboat 整个安装链路里唯一跑在 Windows 侧的安装脚本全文 43 行负责把两个常驻服务铺好、端口放行、开机任务挂上。这篇文章按脚本的真实执行顺序逐段拆解它并说明它和 Linux 侧的端口、路径定义如何一一对上。这个脚本到底干了什么先交代位置源码在仓库的 guest_server/install.bat会被打进OEM 载荷里——Linux 侧的安装器install.ts 中的createOEMAssets()把整个 guest_server 目录连同nssm.exe、注册表文件一起拷进C:\OEMWindows 虚拟机首次启动后由该目录引导执行。脚本的职责可以概括成五步定路径、导注册表、排杀软、拷文件、注册并启动两个服务最后补一条时间同步任务。下面按执行顺序走一遍。准备阶段变量、注册表与杀软排除三个路径变量一份注册表set WB_DIRC:\Program Files\WinBoat set OEM_DIRC:\OEM set NSSM%WB_DIR%\nssm.exe reg import %OEM_DIR%\RDPApps.reg前三个set把安装目录、来源目录、服务管理工具的路径各定死一处后面 40 行全部引用变量不写死路径——这就是改安装目录只需要动这一行的底气。reg import导入的是 RDPApps.reg注册表是 Windows 存放系统级开关的地方这个文件里共 5 项设置包括禁用远程应用的白名单、允许运行未在名单内的程序、关闭自动管理员登录、固定使用服务端键盘布局以及取消每次重启后是否让电脑可被发现的弹窗。对 Winboat 来说前两项是关键——它们保证你在 Linux 桌面点开的那个 Windows 应用不会因为 RDP 策略限制而被拦下。复制文件之前先把目录交给杀软if not exist %WB_DIR% mkdir %WB_DIR% powershell -ExecutionPolicy Bypass -Command Add-MpPreference -ExclusionPath %WB_DIR%第 11 行建目录第 12 行把整个C:\Program Files\WinBoat加入 Windows Defender 的排除列表。为什么在拷贝之前做因为下一步要写入的是一堆可执行文件若不先排除杀软会边写边扫轻则拖慢安装重则把文件拦掉。铺设与注册文件落地再交给系统管着一份 OEM 载荷整目录搬走xcopy %OEM_DIR%\* %WB_DIR%\ /Y /Excopy的/Y表示不询问直接覆盖/E表示连子目录一起拷。按脚本注释这次拷贝落下来的是server\可更新的 Guest Server、updater\专门负责给 server 换版本自己永不被更新、以及guest_token、nssm.exe、RDPApps.reg、install.bat本体。其中guest_token不是这里生成的——它在 Linux 侧由 install.ts 用crypto.randomUUID()一次生成同时写进宿主机和 OEM 目录作为主机与客端之间的共享密钥。用 nssm 注册两个服务%NSSM% install WinBoatGuestServer %WB_DIR%\server\winboat_guest_server.exe %NSSM% set WinBoatGuestServer Start SERVICE_AUTO_START %NSSM% set WinBoatGuestServer AppDirectory %WB_DIR%\server %NSSM% set WinBoatGuestServer Description WinBoat Guest Server API on port 7148nssm 在这里只干一件事把普通 exe 包装成 Windows 服务。服务就是开机自动运行、无需登录、以系统权限常驻的程序。上面四条分别完成注册、设为自动启动、指定工作目录否则服务找相对路径会失败、写描述。第 25 行再补一条ObjectName NT AUTHORITY\SYSTEM让服务以系统账户运行。第 28~32 行对WinBoatGuestServerUpdater是完全对称的复刻只是可执行文件换到updater\目录描述里的端口变成 7150。nssm.exe本身随仓库分发完整性可用 nssm.sha1.txt 里的f280858dcfefabc1a9a006a57f6b266a5d1fde8e核对。放行与收尾防火墙、启动、时间同步netsh advfirewall firewall add rule nameAllow WinBoat API 7148 dirin actionallow protocolTCP localport7148 schtasks /create /tn TimeSyncTask /sc ONSTART /RL HIGHEST /tr \%WB_DIR%\server\scripts\time-sync.bat\ /RU SYSTEM第 35~36 行是两条netsh防火墙规则。防火墙规则相当于在 Windows 默认关门策略上各开一道门TCP 7148 给 Guest Server 的 API 用TCP 7150 给 Updater 用。没有这两行宿主机容器里的进程就连不上客端。第 39~40 行用 nssm 把两个服务依次拉起安装到此完成。末尾这条schtasks创建名为 TimeSyncTask 的启动计划任务每次开机、以 SYSTEM 身份、最高权限执行 time-sync.bat。该脚本只有 3 行命令——停、启w32time服务并强制重新同步作用是防止 Windows 的时间漂移脱离 Linux 宿主避免日志时间戳和证书校验出现混乱。它和项目其他地方的联动这套端口号不是脚本里凭空写死的而是三处约定一致的结果Linux 侧 constants.ts 定义GUEST_API_PORT 7148、GUEST_UPDATE_PORT 7150并据此生成容器端口映射客端 cmd/server/main.go 末尾http.ListenAndServe(:7148, r)监听 API客端 cmd/updater/main.go 用listenAddr :7150接收更新而它自己的健康检查 URL 又指向http://127.0.0.1:7148/health——Updater 依赖 Guest Server 活着才执行换包。换句话说install.bat 是这套约定的Windows 侧落点它把 Go 程序监听在本地回环地址上的端口通过防火墙规则暴露给容器网络。如果你真想改端口三处bat、两个 Go 文件、constants.ts必须同步改改漏一处就是一次静默的失联。排障与常改参数服务起不来在 Windows 里打开services.msc找到 WinBoatGuestServer看状态与上次错误或命令行跑nssm status WinBoatGuestServer。先确认AppDirectory指向的目录里 exe 真实存在。宿主连不上 API依次查三件事——防火墙规则在不在netsh advfirewall firewall show rule nameAllow WinBoat API 7148、服务是否运行、容器端口映射是否生效。改安装目录只动第 2 行set WB_DIR其余行全部跟随变量无需逐行改。时间任务没生效schtasks /query /tn TimeSyncTask确认存在不存在就重跑脚本最后一行。别动guest_token它已同时写入宿主机和客端单独换一边等于作废认证。【免费下载链接】winboatRun Windows apps on Linux with ✨ seamless integration项目地址: https://gitcode.com/GitHub_Trending/wi/winboat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。