Portmaster Tauri 桌面壳维护指南:依赖升级与 Windows 安装包(WIX/NSIS)模板更新

发布时间:2026/10/7 20:24:29
Portmaster Tauri 桌面壳维护指南:依赖升级与 Windows 安装包(WIX/NSIS)模板更新 网络安全【免费下载链接】portmaster Love Freedom - ❌ Block Mass Surveillance项目地址https://gitcode.com/gh_mirrors/po/portmaster点击查看免费下载Portmaster 的桌面 UI 基于 Tauri 构建仓库维护者在升级 Tauri 生态依赖或调整 Windows 安装流程时需要一套明确的操作流程。本文以 desktop/tauri/src-tauri/README.md 为主干结合 Cargo.toml、tauri.conf.json5 以及 templates/wix 与 templates/nsis 下的真实模板源码完整讲解升级 Tauri 依赖 同步前端插件 更新 Windows 安装器模板三大任务读者完成后将能独立完成 Portmaster 桌面壳的日常版本维护与安装包定制。一、背景Portmaster 的 Tauri 桌面壳结构Portmaster 的桌面客户端由两部分组成前端desktop/angular 下的 Angular 应用负责 UI 呈现桌面壳desktop/tauri/src-tauri 下的 Rust 二进制负责系统集成托盘、窗口、通知、剪贴板、单实例等并通过portapiWebSocket与 Portmaster Core 服务通信。从 src/main.rs 可以看出壳层的插件体系tauri_plugin_shellopen_external外部打开支持tauri_plugin_log日志输出Linux 走 StdoutWindows 支持 LogDirtauri_plugin_clipboard_manager/tauri_plugin_dialog/tauri_plugin_os剪贴板、对话框、系统信息tauri_plugin_window_state窗口状态持久化且刻意不保存 VISIBLE 状态避免干扰--background启动参数tauri_plugin_single_instance单实例保护tauri_plugin_notification系统通知tauri_plugin_websocket与 Core 的 WebSocket 通信基础。因此更新 Tauri 版本不是改一个版本号那么简单而是涉及 Rust 端插件、前端 npm 插件、打包模板三方的联动。这正是本指南要解决的问题。二、更新 Tauri 依赖版本2.1 检查 crates.io 上的最新版本升级的第一步是从 crates.io 确认各 Tauri 相关 crate 的最新发布版本再逐项更新 Cargo.toml 中的版本约束。原文档给出的依赖布局如下# Update to latest即需要升级的位置[build-dependencies] tauri-build { version 2.0.0-beta.19, features [] } # Update to latest [dependencies] # Tauri tauri { version 2.0.0-beta.24, features [tray-icon, image-png, config-json5, devtools] } # Update to latest tauri-plugin-shell 2.0.0-beta tauri-plugin-dialog 2.0.0-beta tauri-plugin-clipboard-manager 2.0.0-beta tauri-plugin-os 2.0.0-beta tauri-plugin-single-instance 2.0.0-beta tauri-plugin-cli 2.0.0-beta tauri-plugin-notification 2.0.0-beta tauri-plugin-log 2.0.0-beta tauri-plugin-window-state 2.0.0-beta tauri-cli 2.0.0-beta.21 # Update to latest2.2 当前仓库的实际版本作为对照基线截至本仓库当前状态Cargo.toml 中已升级到 Tauri 2 稳定版依赖当前版本说明tauri-build2.0.5构建期依赖tauri2.2.5启用tray-icon、image-png、config-json5、devtools特性tauri-plugin-shell2.2.1外部打开支持tauri-plugin-dialog2.2.0保存/打开对话框tauri-plugin-clipboard-manager2.1.11剪贴板tauri-plugin-os2.2.0OS 版本与架构tauri-plugin-single-instance2.2.1单实例tauri-plugin-notification2.2.1通知tauri-plugin-log2.2.1日志tauri-plugin-window-state2.2.1窗口状态tauri-plugin-websocket2WebSocket 客户端其中tauri的四个 feature 各自承担职责tray-icon系统托盘图标对应 src/traymenu.rsimage-pngPNG 图标解码config-json5支持 JSON5 格式的 tauri.conf.json5 配置文件devtools开发期调试工具。2.3 执行依赖更新编辑完 Cargo.toml 后运行cargo updatecargo update会依据新的版本约束重新解析依赖树并更新 Cargo.lock。注意tauri-cli是构建工具链的一部分通常通过独立安装或cargo install tauri-cli更新它与 crate 依赖的升级节奏可以略有不同但建议保持同代版本。2.4 特殊约束Windows 的 tao 补丁升级 Tauri 时务必留意 Cargo.toml 中一段特殊的[patch.crates-io]配置为修复 Windows 上随机的 UI 崩溃issue #2185 / #2255仓库将tao锁定到 Safing 维护的分支 committao-v0.32.8-portmaster.1。升级tauri后如果上游已经合入修复如 tauri PR #15411 或 tao PR #1334则按 Cargo.toml 中的注释说明删除 patch 块、删除src/windows_tao_patch.rs及其在src/main.rs中的两处引用然后cargo check验证即可。三、同步前端 npm 插件依赖Tauri 桌面壳升级后Angular 前端desktop/angular里对应的tauri-apps/api与tauri-apps/plugin-*npm 包版本必须与 Rust 端插件保持一致。原文档明确要求Make sure to update the npm tauri plugin dependencies to have the same version as the rust plugins. (desktop/angular)具体操作编辑 desktop/angular/package.json将tauri-apps/api及各tauri-apps/plugin-*的版本号更新为与 Cargo.toml 中对应 Rust crate 相同的版本然后执行npm install并提交更新后的 package-lock.json。版本不一致时前后端 IPC 调用的参数结构与事件名可能出现不兼容导致前端调用invoke或监听事件时报错因此这一步不可省略。四、更新 WIX 安装器模板Windows MSI4.1 模板文件布局Portmaster 的 MSI 安装器使用自定义 WIX 模板相关文件位于 desktop/tauri/src-tauri/templates/wixmain.wxs主模板Tauri 渲染填充{{变量}}后生成最终 MSI 工程文件main_original.wxsTauri 官方原版模板仅作参考对照不直接参与构建files.wxs定义二进制与情报intel文件的组件、以及 Portmaster Core 服务的安装/删除逻辑migration.wxs旧版PMv1数据迁移的自定义动作片段old_service_check.wxs安装前检查旧服务是否运行的片段Migration.vbs/CheckServiceStatus.vbs承载上述自定义动作的 VBScript。这些片段通过 tauri.conf.json5 挂载到构建配置中wix: { fragmentPaths: [ templates/wix/files.wxs, templates/wix/old_service_check.wxs, templates/wix/migration.wxs, ], componentGroupRefs: [BinaryAndIntelFiles], template: templates/wix/main.wxs }4.2 更新步骤获取最新官方模板从 Tauri 仓库的tooling/bundler/src/bundle/windows/templates/main.wxs路径获取官方最新main.wxs跟随 Tauri 版本升级官方模板可能引入新的安装器特性。刷新参考副本将官方模板内容整体替换到 templates/wix/main_original.wxs该文件仅用于对照差异不参与构建。更新主模板并注入服务片段将官方模板内容写入 templates/wix/main.wxs并在文件末尾、Product标签内部追加以下内容!-- Service fragments -- CustomActionRef IdMigrationPropertySet / CustomActionRef IdMigration / !-- Uncommenting the next line will cause the installer to check if the old service is running and fail. Without it, it will automatically stop and remove the old service without notifying the user. -- !-- CustomActionRef IdCheckServiceStatus / -- !-- End Service fragments --CustomActionRef的作用是引用fragmentPaths中定义的 CustomActionmigration.wxs 与 old_service_check.wxs把它们真正编入 MSI 的Product安装执行序列。由于每次替换官方模板都会丢失这些行必须手工重新追加。4.3 三个 CustomAction 的语义MigrationPropertySetMigration默认启用定义于 migration.wxsMigrationPropertySet把[CommonAppDataFolder]、[ProgramMenuFolder]、[StartupFolder]、[AppDataFolder]四个路径拼成CustomActionData传给后续动作MigrationImpersonatenoExecutedeferred以高权限延迟执行 Migration.vbs。Migration.vbs 的迁移逻辑检查旧安装目录CommonAppData\Safing\Portmaster\是否存在以及是否已有migrated.txt标记文件二者任一不满足则跳过复制config.json与databases目录到新数据目录CommonAppData\Portmaster清理旧版遗留删除开始菜单Portmaster Notifier快捷方式、启动文件夹快捷方式、用户开始菜单快捷方式、旧的portmaster-uninstaller.exe创建migrated.txt标记防止重复迁移。CheckServiceStatus默认注释可选启用定义于 old_service_check.wxs其脚本 CheckServiceStatus.vbs 通过sc.exe query PortmasterCore检查服务状态若服务不是STOPPED则弹出提示框并以退出码 1 让安装失败。main.wxs 中的注释给出了关键决策Uncommenting the next line will cause the installer to check if the old service is running and fail. Without it, it will automatically stop and remove the old service without notifying the user.即默认行为不启用CheckServiceStatus会在安装过程中静默停止并移除旧服务如果希望安装器在检测到旧服务运行时报错退出则取消该行注释。当前仓库默认保持注释状态选择静默接管旧服务。4.4 关于迁移功能不再需要时的处理原文档特别说明如果迁移功能不再需要应直接移除整个模板templates/wix/main.wxs的 service fragments 以及相关的migration.wxs/old_service_check.wxs片段引用而不只是注释掉行。这样做会让 Tauri 回退到其默认模板不再调用迁移脚本从而去掉Migration、CheckServiceStatus等自定义动作对安装流程的介入。五、NSIS 安装器的对照实现除 MSIWIX外Portmaster 的 Windows 安装还支持 NSIS。虽然原文档聚焦 WIX但理解 NSIS 侧的等价实现有助于在升级模板时保持两个安装器行为一致。templates/nsis/install_hooks.nsh 通过SimpleSC插件实现了同一套服务接管 数据迁移逻辑NSIS_HOOK_PREINSTALL先SimpleSC::ServiceIsStopped PortmasterCore检测服务若在运行则SimpleSC::StopService停止并等待 2 秒随后拷贝portmaster-core.exe、portmaster-kext.sys、portmaster.zip、assets.zip等二进制及全部 intel 文件到安装目录NSIS_HOOK_POSTINSTALLSimpleSC::RemoveService移除旧服务后重新SimpleSC::InstallService PortmasterCore Portmaster Core 16 2 ...安装类型 16 SERVICE_WIN32_OWN_PROCESS启动类型 2 SERVICE_AUTO_START写入 HKLM 自启动注册表项并执行与Migration.vbs等价的 PMv1→PMv2 迁移同样以migrated.txt作幂等标记NSIS_HOOK_PREUNINSTALL/NSIS_HOOK_POSTUNINSTALL卸载时停止并移除服务、清理自启动注册表与数据文件若用户勾选删除应用数据则整目录清除。NSIS 侧的SimpleSC::StopService失败则MessageBox提示并Abort正是 WIX 侧CheckServiceStatus注释所描述自动停止旧服务策略的另一种实现两者在升级 Tauri 模板时应保持一致的语义避免 MSI 与 NSIS 安装器行为分叉。六、更新后的验证清单完成 Cargo.toml、npm 依赖与 WIX/NSIS 模板的更新后建议按以下顺序验证Rust 侧编译cargo checkTauri 构建期会校验tauri.conf.json5、fragmentPaths指向的 .wxs 文件是否可解析前端联调npm install后在 desktop/angular 构建确认invoke命令见 src/commands/mod.rs与插件事件无版本不兼容报错Windows 打包重新生成 MSI 与 NSIS 安装包在干净环境含旧版 Portmaster 遗留数据的机器执行一次完整安装确认旧PortmasterCore服务被静默停止/接管新服务以LocalSystem自动启动MSI 侧参数见 files.wxs 的ServiceInstallconfig.json与databases成功迁移到C:\ProgramData\Portmaster且migrated.txt标记已生成若启用了CheckServiceStatus服务运行时安装应如预期失败卸载回归确认卸载会移除服务、自启动注册表项与按用户选择数据目录。按此流程Portmaster 桌面壳即可平稳跟进 Tauri 生态版本同时保持 Windows 安装器在服务接管与数据迁移上的行为一致。赞分享网络安全【免费下载链接】portmaster Love Freedom - ❌ Block Mass Surveillance项目地址https://gitcode.com/gh_mirrors/po/portmaster点击查看免费下载相关推荐一份 CLAUDE.md 治好 AI 编码坏习惯Karpathy 行为准则实战教程一份 CLAUDE.md 治好 AI 编码坏习惯Karpathy 行为准则实战教程 andrej karpathy skills 是一个围绕单个 CLAUDEAI 技能提示工程Epic Stack 项目维护指南Node.js 版本升级与 NPM 依赖更新实战Epic Stack 项目维护指南Node.js 版本升级与 NPM 依赖更新实战 导读 本文聚焦 Epic Stackepic stack全栈应用启动模后端前端开发工具认证鉴权Flutter Engine 依赖升级指南android_embedding_bundle 的 CIPD 打包与 Android Embedding 依赖维护全流程Flutter Engine 依赖升级指南android_embedding_bundle 的 CIPD 打包与 Android Embedding 依赖维护跨平台移动开发前端UI组件桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询