WinApp解决方案中多可执行文件打包MSIX后无法访问的问题求助
解决MSIX打包后主项目无法找到依赖exe的问题
方案1:调整MSIX打包项目的文件部署配置
- 若解决方案中没有MSIX打包项目,先添加一个「Windows Application Packaging Project」
- 在打包项目的Applications节点下,将project_a设为Entry Point
- 右键点击打包项目的Packages节点 → 选择「Add → Project Output」,添加project_b的主输出及依赖文件
- 选中添加的project_b.exe,在属性面板里把Package Action设为Content,并将Destination Subdirectory设为空(和project_a.exe同目录),打包后两个文件会部署到同一位置
方案2:通过应用包API合法获取依赖exe路径
不要直接硬编码或访问C:\ProgramFiles\WindowsApps目录,用系统API获取合法路径:
using Windows.ApplicationModel; using System.IO; // 获取应用包的安装根目录 var installDir = Package.Current.InstalledLocation.Path; // 拼接project_b的路径(要和打包时的部署路径一致) var projectBExePath = Path.Combine(installDir, "project_b.exe");
这种方式不会触发权限异常,因为是沙箱允许的合法访问路径。
方案3:在打包阶段替代生成后事件复制文件
普通项目的生成后事件在MSIX打包流程中不会生效,直接在打包项目里加后期构建步骤:
- 右键点击MSIX打包项目 → 「属性」→ 「构建事件」→ 「后期生成事件命令行」
- 添加复制命令,示例:
xcopy "$(SolutionDir)project_b\bin\$(Configuration)\project_b.exe" "$(SolutionDir)project_a\bin\$(Configuration)\" /Y
这样打包前会自动把project_b.exe复制到project_a的输出目录,打包时会被包含进去。
方案4:将project_b改为类库(业务允许的话)
如果project_b不需要独立运行,把它改成.NET类库,直接在project_a中引用,调用其功能即可,彻底规避进程启动的路径和权限问题。
内容的提问来源于stack exchange,提问作者Toby
相关产品推荐
相关产品推荐

