如何用Windows Application Packaging Project打包含Fixup DLL的MSIX并部署到文件共享实现自动更新?
解决方案:集成Package Support Framework到Windows Application Packaging Project并部署到共享目录
一、在打包项目中直接集成PSF修复组件
不用手动解压重签MSIX,直接在Windows Application Packaging Project里完成PSF的集成:
- 下载对应版本的Package Support Framework(PSF),取出你需要的
WorkingDirectoryFixup.dll,以及PSF核心文件psflauncher.exe、psfruntime.dll - 右键点击打包项目 → 添加 → 现有项,把这几个文件加进去,然后在属性面板设置:
- 内容:是
- 复制到输出目录:始终复制
- 修改
Package.appxmanifest:- 将应用入口点从原C#程序的exe路径,改成
psflauncher.exe - 添加
psfconfig.json配置文件到项目(同样设置内容为“是”),写入规则指定原应用路径和工作目录修复逻辑,示例配置:
{ "applications": [ { "id": "YourAppID", "executable": "YourOriginalApp.exe", "workingDirectory": "." } ], "processes": [ { "executable": "YourOriginalApp.exe", "fixups": [ { "dll": "WorkingDirectoryFixup.dll", "config": { "workingDirectory": "." } } ] } ] } - 将应用入口点从原C#程序的exe路径,改成
二、统一签名确保部署兼容性
- 用企业内部CA颁发的代码签名证书,在打包项目的签名选项卡中配置签名,确保所有目标机器信任该证书(可通过组策略批量推送证书到受信任根目录)
- 每次更新版本都用同一证书签名,保证后续自动更新的兼容性
三、部署到共享目录并启用自动更新
- 把打包生成的MSIX包和自动安装文件(
.appinstaller)上传到企业共享目录,给所有目标机器开放读取权限 - 编辑
.appinstaller文件的更新配置,指定共享目录为更新源,示例:<UpdateSettings> <OnLaunch HoursBetweenUpdateChecks="0" /> <AutomaticBackgroundTask /> <UpdateUri>\\YourFileServer\SharedApps\YourApp\</UpdateUri> </UpdateSettings> - 用户首次安装双击共享目录的
.appinstaller即可,后续启动应用时会自动检查共享目录的差分更新,无需手动操作
关键说明
- 全程无需手动修改已打包的MSIX,避免破坏签名和更新流程
- 只要保持更新包用同一证书签名,MSIX的自动差分更新功能完全不受影响
WorkingDirectoryFixup.dll会强制把应用工作目录设为MSIX的安装根目录,彻底解决原程序依赖工作目录的崩溃问题
内容的提问来源于stack exchange,提问作者Daniel White
相关产品推荐
相关产品推荐

