如何从远程服务器更新.NET MAUI Windows应用程序?
实现MAUI应用自动更新的可行方案
基于MSIX安装包的原生自动更新(Windows平台优先推荐)
既然你之前用WinForms+FTP实现过自动更新,MAUI Windows端更适合用官方原生的MSIX App Installer机制,比手动FTP下载更稳定且符合Windows应用更新规范。
1. 配置MSIX打包与更新元数据
- 先在Visual Studio中开启MAUI项目的MSIX打包(项目属性 → 打包 → 勾选"生成MSIX包")。
- 编辑
Package.appxmanifest,添加更新相关配置:<Properties> <AppInstallerUri>https://你的远程服务器/你的应用.appinstaller</AppInstallerUri> <AutoUpdate>true</AutoUpdate> <UpdateInterval>6</UpdateInterval> <!-- 自动检查更新的间隔(单位:小时) --> </Properties>
2. 生成并配置App Installer文件
- 生成MSIX包后,Visual Studio会自动生成对应的
.appinstaller文件,修改其中的UpdateUri指向远程服务器上的最新版MSIX地址:<AppInstaller xmlns="http://schemas.microsoft.com/appx/appinstaller/2018" Version="1.0.0.0" Uri="https://你的远程服务器/你的应用.appinstaller" UpdateUri="https://你的远程服务器/你的应用_v1.0.1.0.msix"> <MainPackage Name="你的应用ID" Publisher="CN=你的证书名称" Version="1.0.0.0" Uri="https://你的远程服务器/你的应用_v1.0.0.0.msix" /> </AppInstaller>
3. 部署文件到远程服务器
- 将
.appinstaller文件和各版本MSIX包上传到你的FTP服务器(和之前WinForms的部署方式一致)。 - 确保服务器配置正确的MIME类型:
.msix对应application/msix,.appinstaller对应application/appinstaller,避免浏览器无法识别文件。
4. 主动触发更新检查(可选)
虽然App Installer会自动检查更新,但你可以在应用启动时主动触发,给用户更明确的提示:
#if WINDOWS using Windows.ApplicationModel; using Windows.ApplicationModel.Store.Preview.InstallControl; private async Task CheckForUpdates() { var updateManager = await AppUpdateManager.GetDefaultAsync(); var updateStatus = await updateManager.CheckForUpdateAsync(); if (updateStatus.UpdateAvailability == UpdateAvailability.Available) { // 提示用户有更新,确认后启动更新 await updateManager.StartUpdateAsync(); } } #endif
沿用FTP手动更新的跨平台方案
如果想继续用之前的FTP模式,可实现跨平台通用的更新逻辑:
- 在FTP服务器根目录放置一个
version.json文件,记录最新版本号和安装包下载路径。 - 应用启动时,下载该文件并对比本地版本号。
- 若有更新,下载对应平台的安装包(Windows用MSIX/EXE,Android用APK等)。
- 下载完成后,调用系统安装接口并退出当前应用(Windows需注意管理员权限,Android需申请安装权限)。
常见问题排查
- App Installer更新失效:检查远程服务器文件路径是否可访问,新版本MSIX必须用与旧版本相同的证书签名,Windows系统需允许从Web安装应用(设置 → 应用 → 应用和功能 → 选择"允许任意来源的应用")。
- FTP手动更新失败:确保FTP服务器权限正常,下载过程中处理好网络异常,安装包路径需对应正确的平台格式。
内容的提问来源于stack exchange,提问作者Adrian Hurst
相关产品推荐
相关产品推荐

