ARTICLE DETAIL

资讯详情

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

QGroundControl 微软商店发布方案全解析:从 NSIS 安装器全面迁移到 MSIX

QGroundControl 微软商店发布方案全解析:从 NSIS 安装器全面迁移到 MSIX 无人机智能硬件【免费下载链接】qgroundcontrolCross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)项目地址https://gitcode.com/gh_mirrors/qg/qgroundcontrol点击查看免费下载QGroundControl 的 Windows 商店发布计划见仓库文档 qgc-windows-store-plan.md阐述了一条清晰的迁移路径用微软 MSIX 打包格式完全取代现有 NSIS 安装器实现一个安装包同时服务官网直接下载与 Microsoft Store 分发的双通道目标并以Daily 航班组先灰度、稳定版后上线的节奏推进。本文基于该计划文档结合仓库中 CreateCPackNSIS.cmake、Install.cmake、windows.yml 与 verify-installer.ps1 等源码与配置完整还原账户采购、一次性手动设置、打包与 CI 改造、灰度发布全流程帮助读者掌握将 Qt/Win32 桌面应用发布到微软商店的完整工程方案。方案总览QGroundControl 的 Windows 商店发布计划核心要点如下安装器替换现有 NSIS 安装器被 MSIX 完全取代MSIX 不是 NSIS 之外的附加产物而是唯一安装格式。双通道单一包一个 MSIX 包同时服务官网直接下载用户双击.msix即可安装体验类似.exe与 Microsoft Store 分发。灰度策略先将每日构建daily build发布到商店的Daily 航班组flight group待流水线验证稳定、runFullTrust受限能力获批、且稳定版 5.1 就绪后再将稳定版发布到商店主 listing。构建产物不变NSIS 当前包装的 staged install tree安装树改由MakeAppx.exe打包构建输出本身QGroundControl.exe及全部 DLL不发生任何变化。该计划对应着仓库中的三处关键实现CPack 模块 CreateCPackNSIS.cmake当前 Windows 生产安装器、Windows 构建流水线 windows.yml其中Create Installer与Install, upgrade, and verify installer两个步骤将被替换、以及 NSIS 安装器验证脚本 verify-installer.ps1MSIX 迁移后不再需要。采购与账户准备发布到微软商店之前需要完成三笔花钱的准备Microsoft Partner Center 账户、代码签名证书、Azure 订阅。Microsoft Partner Center 账户费用个人注册一次性费用 19 美元注册公司免费。用途注册应用、管理航班组flights、提交包。注册要求使用组织的 Microsoft 账户注册而非个人账户。代码签名证书项目说明类型OV组织验证为最低要求EV扩展验证为推荐推荐 CADigiCert 或 Sectigo二者均支持直接签发进 Azure Key Vault——私钥在 HSM 内生成、永不导出EV 的价值直接下载时立即绕过 Windows SmartScreen 声誉警告OV 也可用但需要积累下载量建立信誉后才不会警告证书策略一张证书签署所有构建daily、stable直到过期后更新再签发重要时间节点自 2026 年 2 月起CA/Browser Forum 将代码签名证书有效期上限收紧为1 年因此所有证书现在都是年度续签。证书价格参考2026 年近似值CAOVEVSectigo约 220 美元/年约 280 美元/年DigiCert约 400 美元/年约 560 美元/年Sectigo 在同等信任级别下显著更便宜DigiCert 的溢价来自品牌认知与企业支持而非技术优势。对开源项目而言Sectigo OV 或 EV 是务实之选。文档特别指出对 QGC 而言选择 EV 多花的费用Sectigo 约 60 美元/年是值得的——因为 QGC 同时通过官网直接下载分发没有 EV每个新版本二进制都会触发直接下载用户的 SmartScreen 警告直到下载量积累足够每个版本可能要等数周。Azure 订阅用途Azure Key VaultHSM 证书存储与 Azure ADCI 认证。开通方式标准即用即付pay-as-you-go账户只需 Microsoft 账户与信用卡无需企业协议或承诺同一账户和租户同时覆盖 Key Vault 与 Partner Center API 凭据所需的 Azure AD 应用注册。Key Vault 层级必须使用Premium层——Standard 层不支持 HSM 托管的密钥而 CA 对 OV/EV 证书强制要求 HSM。费用估算HSM 保护密钥存储约 12 美元/年每个密钥 1 美元/月外加每 10,000 次签名操作 0.03 美元——在现实构建频率下按操作计费部分几乎可忽略即便每天 1,000 次构建月成本也仅约 1 美元。若项目已有 Azure 资源此部分可能已就绪。一次性手动设置无法自动化以下步骤必须在任何 CI 工作开始前人工完成无法通过脚本自动化。1. 在 Partner Center 注册应用保留应用名 QGroundControl。记录以下值——它们将写入 MSIX manifestPublisher ID如CNXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXPackage Identity Name如MAVLinkQGroundControlPackage Family Name2. 创建 Package Flight 航班组在 Partner Center 创建名为Daily的航班组。通过 Microsoft 账户邮箱添加开发者与测试者。记录Flight ID——CI 提交流程需要它。主 listing 可保持未发布草稿状态航班组成员通过直接链接安装而不是在商店搜索安装。3. 将代码签名证书签发到 Azure Key Vault创建 Azure Key Vault 实例。向 DigiCert 或 Sectigo 购买支持直接签发进 Key Vault 的 OV/EV 证书。记录Key Vault URL与Certificate Name。4. 为 CI 创建 Azure AD 应用在同一租户中注册 Azure AD 应用程序。授予其 Partner Center Submission API 权限与 Key Vault 签名权限。记录Tenant ID、Client ID、Client Secret。5. Microsoft runFullTrust 审批首次商店提交时微软审核团队必须批准runFullTrust受限能力。该能力对现有 Win32 桌面应用是常规授予项。仅首次提交需要预留额外审核时间。安装器策略NSIS → MSIX现状CPack/NSIS 是 Windows 生产安装器从源码结构看当前仓库的 Windows 安装器完全由 CPack 的 NSIS 生成器驱动在 Install.cmake 中Windows 平台在未指定QGC_CPACK_GENERATOR时默认设为NSIS并注释明确CPack NSIS 是生产安装器production installerQGC_CPACK_GENERATORNSIS时加载 CreateCPackNSIS.cmake最终通过自定义目标qgc-package调用cpack -G NSIS产出QGroundControl-installer-ARCH.exe见 Install.cmake。安装器文件名中的架构由 CreateCPackNSIS.cmake 的_qgc_normalize_nsis_arch函数统一为AMD64/ARM64交叉编译时形如AMD64-ARM64。这份 NSIS 配置也印证了计划文档中干净卸载、无注册表孤儿等诉求的由来它通过CPACK_NSIS_EXTRA_INSTALL_COMMANDS向 HKLM 写入 Uninstall 注册表键和 Windows Error Reporting LocalDumps 键CreateCPackNSIS.cmake并在预安装阶段检测旧版本、清理孤儿注册表项、执行升级卸载同文件 L53-L110。这些注册表操作正是 MSIX 想要消除的运维负担。MSIX 相比 NSIS 的优势计划文档列出 MSIX 相对 NSIS 的核心收益保证干净卸载无注册表孤儿安装无需管理员权限默认按用户安装安装失败自动回滚通过.appinstaller文件支持增量更新自托管分发场景单一包格式同时服务直接下载与商店两种渠道。唯一前提直接下载的 MSIX 必须使用可信 CA 签发的证书见上文证书部分。自签名证书会强制用户开启开发者模式才能安装因此正规 CA 证书必不可少。构建管线保持不变计划文档强调What Doesnt Change不变的部分正好与仓库实现对应构建流水线CMake、Qt、GStreamer不变二进制QGroundControl.exe与全部 DLL 不变用于直接下载的 AWS 制品上传不变——对应 windows.yml 中的 Attest and Upload 步骤使用AWS_ROLE_ARN、AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_DISTRIBUTION_ID等 secrets之前交给 NSIS 的 staged install tree 改由MakeAppx.exe打包。代码与打包改动移除清单计划文档明确列出需要删除的文件与逻辑移除项仓库现状说明cmake/install/CPack/CreateCPackNSIS.cmake当前 Windows NSIS 打包模块需替换为 MSIX 版本deploy/windows/nullsoft_installer.nsi文档计划删除的旧 NSIS 脚本当前仓库安装器逻辑已主要由 CPack NSIS 模块承担deploy/windows/installheader.bmp当前仍作为 NSIS 安装器页眉图被引用QGC_WINDOWS_INSTALL_HEADER_PATH定义于 CustomOptions.cmake并被 CreateCPackNSIS.cmake 用作CPACK_NSIS_MUI_HEADERIMAGEcmake/install/中的 NSIS 相关逻辑包括CPACK_GENERATOR NSIS默认分支与QGC_CPACK_GENERATOR校验逻辑新增 1deploy/windows/Package.appxmanifest该文件定义应用的商店身份与能力。关键字段取自 Partner Center 注册信息Package xmlnshttp://schemas.microsoft.com/appx/manifest/foundation/windows10 xmlns:rescaphttp://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities xmlns:uaphttp://schemas.microsoft.com/appx/manifest/uap/windows10 Identity NameMAVLinkQGroundControl PublisherCNXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX Versionx.x.x.0 / Properties DisplayNameQGroundControl/DisplayName PublisherDisplayNameMAVLink/PublisherDisplayName LogoAssets\StoreLogo.png/Logo /Properties Applications Application IdQGroundControl Executablebin\QGroundControl.exe EntryPointWindows.FullTrustApplication uap:VisualElements DisplayNameQGroundControl ... / !-- Execution aliases for GPU modes -- Extensions uap:Extension Categorywindows.appExecutionAlias uap:AppExecutionAlias uap:ExecutionAlias AliasQGroundControl.exe / /uap:AppExecutionAlias /uap:Extension /Extensions /Application /Applications Capabilities rescap:Capability NamerunFullTrust / /Capabilities /Package要点解读IdentityNamePackage Identity Name与PublisherPublisher ID必须与 Partner Center 注册值一致Version为x.x.x.0MSIX 版本要求四段。ApplicationExecutable指向bin\QGroundControl.exeEntryPointWindows.FullTrustApplication表明这是完整的 Win32 桌面应用Full Trust 模型对应runFullTrust受限能力。appExecutionAlias为 GPU 模式提供执行别名对应 NSIS 时代的-swrastGPU 安全模式启动方式见 CreateCPackNSIS.cmake 中创建的 (GPU Safe Mode) 快捷方式。CapabilitiesrunFullTrust是受限能力rescap命名空间即上文提到的需微软审核批准的能力。新增 2deploy/windows/Assets/商店视觉资产商店要求的视觉资产及强制尺寸文件尺寸StoreLogo.png50×50Square44x44Logo.png44×44Square150x150Logo.png150×150Wide310x150Logo.png310×150Square310x310Logo.png310×310SplashScreen.png620×300新增 3cmake/install/CPack/CreateCPackMSIX.cmake或 post-install 脚本该模块替换CreateCPackNSIS.cmake。安装树 staged 完成后执行# Configure manifest with version number configure_file( ${CMAKE_SOURCE_DIR}/deploy/windows/Package.appxmanifest.in ${CMAKE_BINARY_DIR}/Package.appxmanifest ONLY ) # Copy manifest and assets into staged install tree file(COPY ${CMAKE_BINARY_DIR}/Package.appxmanifest DESTINATION ${CMAKE_INSTALL_PREFIX}) file(COPY ${CMAKE_SOURCE_DIR}/deploy/windows/Assets DESTINATION ${CMAKE_INSTALL_PREFIX}) # Pack MSIX (MakeAppx.exe must be on PATH via Windows SDK) execute_process( COMMAND MakeAppx.exe pack /d ${CMAKE_INSTALL_PREFIX} /p ${CMAKE_BINARY_DIR}/${QGC_MSIX_NAME} )签名不在 CMake 阶段处理而是放到 CI 中见下节。注意 manifest 使用.in模板配合configure_file(..., ONLY)注入版本号——这是与现有 NSIS 模块一致的 CMake 约定NSIS 模块同样通过string(CONFIGURE ... ONLY)注入CMAKE_PROJECT_NAME、QGC_ORG_NAME等占位符。CI 流水线改造windows.yml当前流水线中的两个将被移除的步骤对照仓库 windows.ymlCreate Installer 步骤L212-L218通过cmake-buildaction 运行qgc-package目标产出 NSIS 安装器MSIX 方案将替换为打包 签名流程。Install, upgrade, and verify installer 步骤L262-L270含 L291-L294 的 Uninstall and verify cleanup调用 verify-installer.ps1 做安装/升级/卸载三阶段验证——该脚本会检查bin\QGroundControl.exe存在性、升级时应用数据%APPDATA%\QGroundControl保留、GStreamer 插件 DLL 数量、HKLM Uninstall 注册表键与 WER LocalDumps 键。这些 NSIS 特有的验证点注册表键等在 MSIX 时代将被Add-AppxPackage冒烟测试取代。另外当前流水线矩阵覆盖amd64、arm64、arm64-cross三个变体安装器制品名为QGroundControl-installer-AMD64/ARM64/AMD64-ARM64windows.ymlMSIX 迁移后同样需要为这些架构产出对应的.msix包。新增步骤 1签名 MSIXAzureSignTool使用 AzureSignTool——无需硬件令牌通过 Key Vault API 完成签名- name: Install AzureSignTool run: dotnet tool install --global AzureSignTool - name: Sign MSIX run: | AzureSignTool sign --azure-key-vault-url ${{ secrets.AKV_URL }} --azure-key-vault-client-id ${{ secrets.AZURE_CLIENT_ID }} --azure-key-vault-client-secret ${{ secrets.AZURE_CLIENT_SECRET }} --azure-key-vault-tenant-id ${{ secrets.AZURE_TENANT_ID }} --azure-key-vault-certificate ${{ secrets.AKV_CERT_NAME }} --timestamp-rfc3161 http://timestamp.digicert.com QGroundControl.msix shell: pwsh签名关键点--timestamp-rfc3161提供 RFC 3161 时间戳确保证书过期后签名依然有效——这与2026 年起证书有效期 1 年直接相关时间戳是长期有效的保障。新增步骤 2验证 MSIX可选冒烟测试- name: Verify MSIX shell: pwsh run: | Add-AppxPackage -Path QGroundControl.msix $app Get-AppxPackage -Name MAVLinkQGroundControl if (-not $app) { Write-Error MSIX install failed; exit 1 }新增步骤 3发布到商店航班组每次 master 合并- name: Publish to Daily Flight if: github.ref refs/heads/master uses: microsoft/store-publishv1 with: tenant-id: ${{ secrets.AZURE_TENANT_ID }} client-id: ${{ secrets.AZURE_CLIENT_ID }} client-secret: ${{ secrets.AZURE_CLIENT_SECRET }} app-id: ${{ secrets.STORE_APP_ID }} flight-id: ${{ secrets.STORE_DAILY_FLIGHT_ID }} package-path: QGroundControl.msix新增步骤 4发布到商店主 listing仅 tag/release- name: Publish to Store (Stable) if: startsWith(github.ref, refs/tags/v) uses: microsoft/store-publishv1 with: tenant-id: ${{ secrets.AZURE_TENANT_ID }} client-id: ${{ secrets.AZURE_CLIENT_ID }} client-secret: ${{ secrets.AZURE_CLIENT_SECRET }} app-id: ${{ secrets.STORE_APP_ID }} package-path: QGroundControl.msix两条发布路径的触发条件与仓库当前触发方式天然契合master 分支对应每日构建windows.yml 的push: branches: [master, Stable*]v*tag 对应稳定版发布。新增 GitHub SecretsSecret说明AKV_URLAzure Key Vault URLAKV_CERT_NAMEKey Vault 中的证书名AZURE_TENANT_IDAzure AD 租户 ID与商店提交通用AZURE_CLIENT_IDAzure AD 应用 Client ID与商店提交通用AZURE_CLIENT_SECRETAzure AD 应用 Client Secret与商店提交通用STORE_APP_IDPartner Center 中的应用 IDSTORE_DAILY_FLIGHT_IDDaily 航班组的 Flight ID注意AZURE_TENANT_ID、AZURE_CLIENT_ID、AZURE_CLIENT_SECRET在签名与商店提交之间共享——同一个 Azure AD 应用同一套凭据两用。上线节奏Rollout Sequence完成采购Partner Center 账户、代码签名证书、Azure 订阅。在 Partner Center 注册应用、创建 Daily 航班组、将证书签发进 Key Vault、创建 Azure AD 应用。实现 MSIX 打包与 CI 改动。开始将每日构建发布到航班组——这一步验证整条流水线并触发runFullTrust审核。待流水线稳定、证书获批、稳定版 5.1 就绪后将首个稳定版发布到商店主 listing。这条先灰度后稳定的路线把商店审核风险尤其是首次runFullTrust审批与发布管线风险全部消化在 Daily 航班组阶段主 listing 首次上线即走已验证的完整链路。延伸阅读qgc-windows-store-plan.md本文所依据的原始发布计划文档。CreateCPackNSIS.cmake当前 NSIS 打包模块全文含注册表读写、快捷方式、架构归一化等将被替换的逻辑。Install.cmakeCPack 生成器选择与qgc-package目标定义。windows.ymlWindows 构建流水线其中 Create Installer 与 Install, upgrade, and verify installer 步骤即文档计划替换的对象。verify-installer.ps1NSIS 安装/升级/卸载验证脚本迁移后由Add-AppxPackage冒烟测试取代。CustomOptions.cmakeQGC_WINDOWS_INSTALL_HEADER_PATH等 Windows 打包相关选项定义。赞分享无人机智能硬件【免费下载链接】qgroundcontrolCross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)项目地址https://gitcode.com/gh_mirrors/qg/qgroundcontrol点击查看免费下载相关推荐PWABuilder套件全面解析从PWA开发到应用商店发布PWABuilder套件全面解析从PWA开发到应用商店发布 前言 在当今移动优先的互联网时代渐进式Web应用 PWA 因其跨平台、轻量级和接近原生应用的体验ros2_control控制器管理器深度解析实时控制的核心组件ros2_control控制器管理器深度解析实时控制的核心组件 ros2_control控制器管理器 是ROS 2机器人控制框架的核心大脑负责协调所有硬件接机器人Windows 11 LTSC微软商店一键安装解决方案Windows 11 LTSC微软商店一键安装解决方案 Windows 11 24H2 LTSC版本作为长期支持版系统以其稳定性和高效性受到企业用户和专业开发运维CLI上一篇TiXL 渲染性能优化实战指南识别瓶颈、测量与调优下一篇Matter all-devices-app 中的 Shared Device Capabilities可复用能力抽象层的设计与实现解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表