十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Winboat 自动化部署:Windows 客制服务在 Linux 虚拟机里跑起来的完整路径

Winboat 自动化部署:Windows 客制服务在 Linux 虚拟机里跑起来的完整路径 Winboat 自动化部署Windows 客制服务在 Linux 虚拟机里跑起来的完整路径【免费下载链接】winboatRun Windows apps on Linux with ✨ seamless integration项目地址: https://gitcode.com/GitHub_Trending/wi/winboat你是不是也被这种问题卡住过做了一个在 Linux 上跑 Windows 应用的工具可 Windows 那边每次虚拟机重启后都得手动把辅助进程拉起来、等它就绪才能继续干活Winboat 正是解决这一类问题的项目——它让你用 Linux 直接运行 Windows 应用。其中的关键是一个藏在 Windows 虚拟机里的小 HTTP 服务Guest Server负责打通两边的通信而它是怎么被装进 Windows 并常驻运行的就是这篇文章要讲的内容。方案全貌先装什么、谁来装Winboat 本身是一个 Electron 应用它在 Docker 或 Podman 容器里跑一台完整的 Windows 虚拟机。Linux 端的主程序通过 Guest Server 与 Windows 通信这个服务在虚拟机里监听一个 HTTP 端口提供应用列表、系统指标、健康检查等接口显示层面则靠 FreeRDP 配合 Windows 的 RemoteApp 协议把 Windows 应用画成原生 Linux 窗口。部署流程藏在安装阶段Electron 应用在启动虚拟机之前会先把 Guest Server 二进制、部署脚本、nssm.exe 和认证 token 打包成一个目录挂载成虚拟机里的C:\OEM。Windows 首次启动的无人值守安装会触发install.bat执行一次把整个文件落地 服务注册 防火墙放行跑完。对用户来说这一步完全透明。安装脚本怎么落地先看文件部署。install.bat把C:\OEM里的内容全量复制到C:\Program Files\WinBoatxcopy %OEM_DIR%\* %WB_DIR%\ /Y /E/E保证子目录递归复制/Y跳过覆盖确认这两点都是无人值守执行的前提。还有个细节脚本会先给目标目录加 Windows Defender 排除项再复制。虚拟机磁盘读写频繁让杀软实时扫描刚写入的二进制会明显拖慢安装。接下来是核心动作——服务注册。Guest Server 不是普通进程而是通过 nssm 包装成标准 Windows 服务%NSSM% install WinBoatGuestServer %WB_DIR%\server\winboat_guest_server.exe %NSSM% set WinBoatGuestServer Start SERVICE_AUTO_START %NSSM% set WinBoatGuestServer ObjectName NT AUTHORITY\SYSTEM用 SYSTEM 账户运行意味着服务不依赖任何用户登录也避免了用户密码变更导致服务失效这类常见坑设置自动启动后虚拟机每次开机 API 都直接可用。最后脚本还用 netsh 给 7148主 API和 7150更新服务各加一条入站防火墙规则——这等于只开这两个口其余默认全拦。更新服务怎么做到回滚第二个服务WinBoatGuestServerUpdater负责 Guest Server 的升级设计值得多看一眼。Electron 端把新版 zip 推到 7150 端口更新器先解压到server.new停掉旧服务再用 rename 交换目录、启动新服务并等健康检查if err : startService(guestServiceName); err nil waitHealthy(guestHealthURL, healthTimeout) { os.RemoveAll(oldDir) return nil }新版本健康检查不过就自动把server.old换回去。源码见 swap.go这里用同卷 rename 代替文件拷贝让交换接近原子操作——中途崩掉也不会留下新旧混在一起的半吊子状态。实战细节与避坑端口不通→怎么查服务明明在跑Linux 端却连不上时先在虚拟机里用netsh advfirewall firewall show rule nameall确认 7148 规则存在再看容器的端口映射。怎么解所有端口号集中在 constants.ts 定义改端口要同步动三处——该文件里的GUEST_API_PORT、install.bat里的 netsh 规则与服务 Description、以及 main.go 里的ListenAndServe监听地址。服务无响应→怎么查先在虚拟机里跑nssm status WinBoatGuestServer确认服务真的处于 Running再看 nssm 重定向的日志。怎么解状态正常但 API 不通多数是防火墙或容器端口映射问题而不是服务代码问题别急着怀疑二进制坏了。改安装路径→怎么改需要动三处——install.bat里的WB_DIR变量、nssm set ... AppDirectory那一行、以及 Defender 排除路径。只改其中一处服务的工作目录就会和实际文件位置错位。收尾回到开头的场景装上 Winboat 之后Guest Server 会在虚拟机里自动注册成 Windows 服务、随系统自启、升级自带回滚把 Windows 里的服务跑起来并保住这件事被一条批处理闭环掉了。这种挂载一个目录 一次无人值守安装的思路也值得你在做跨系统集成时参考。【免费下载链接】winboatRun Windows apps on Linux with ✨ seamless integration项目地址: https://gitcode.com/GitHub_Trending/wi/winboat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表