如何通过MSIX的Windows应用打包项目设置应用“起始于”文件夹?
问题解答
1. MSIX安装包能否设置快捷方式的“起始于”文件夹?
不行。MSIX是基于容器化的打包格式,和Wix、InnoSetup这类传统安装程序的快捷方式机制完全不同:
- MSIX的快捷方式由包清单(Package.appxmanifest)定义,没有“起始于”这个配置项。
- MSIX应用运行时的当前工作目录默认是系统管理的包安装目录(位于
C:\Program Files\WindowsApps下的对应包文件夹),用户无法通过快捷方式手动指定工作目录。 - 即便是用桌面桥接(Desktop Bridge)打包的传统Win32应用,MSIX也会限制工作目录的修改,以保证沙箱环境的安全性。
2. 运行时获取MSIX应用的安装路径(替代注册表查询)
不建议直接查询注册表获取安装路径,因为WindowsApps目录结构、包路径会随版本更新、系统配置变动,注册表项也可能发生变化。更可靠的方式是通过官方API或环境变量:
代码层面获取(推荐)
- C#/.NET:使用
Windows.ApplicationModel.Package类直接获取安装路径:using Windows.ApplicationModel; string installPath = Package.Current.InstalledLocation.Path; string fDatPath = Path.Combine(installPath, "f.dat"); - C++:调用Win32 API
GetCurrentPackageInfo获取路径:#include <windows.h> #include <appmodel.h> #include <wchar.h> wchar_t installPath[MAX_PATH]; UINT32 pathLength = MAX_PATH; GetCurrentPackageInfo(0, &pathLength, nullptr, &pathLength, installPath); wcscat_s(installPath, L"\\f.dat");
环境变量/注册表(备选,不推荐)
- 环境变量
%ProgramFiles%\WindowsApps\<PackageFamilyName>可定位到包目录,但PackageFamilyName需要提前从包清单的Identity节点获取。 - 注册表项
HKLM\Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications\<PackageFullName>下的Path值存储安装路径,但PackageFullName包含版本号,每次应用更新都会变化,维护成本高。
3. 终极解决方案
修改应用代码,不要依赖当前工作目录读取文件,而是通过上述方法主动获取安装路径,拼接f.dat的绝对路径进行读取。这是最稳定的方案,既适配MSIX环境,也能兼容传统安装场景。
内容的提问来源于stack exchange,提问作者Wayne
相关产品推荐
相关产品推荐

