问题描述
我有一个 Windows 桌面应用程序,它使用带有侧载的 msix 系统进行部署。这意味着当我尝试将文件保存到应用程序的 appdata 文件夹时,应用程序会访问 %appdata%..\Local\Packages
最近我添加了一个检查,看看应用程序是否已经在用户的机器上运行。应用程序首次运行时会创建快捷方式,并有条件地显示使用条款和条件。此检查查找并随后设置 HKEY_CURRENT_USER\SOFTWARE
问题是这似乎也被沙盒化了。检查成功检测到第一次应用程序启动,并且不会在后续启动时触发。但是,注册表项不存在并且在注册表编辑器中不可见。我添加了一个像“uniquestringasdjkhdjkfhd”这样的dword值并搜索了它,但注册表搜索功能没有找到它。
这让调试变得非常困难,因为我无法测试全新安装状态。我需要能够删除此密钥及其所有子项。有谁知道超级秘密的windows通用注册表隐藏在哪里?
解决方法
所有注册表操作都被重定向到特殊的每应用注册表配置单元。您的包可以包含以下配置单元,如果您提取其内容,则可以在单独的文件中看到:
- 注册表.dat
- 用户.dat
- User.Classes.dat
所有 HKLM 条目都将位于 Registry.dat 文件下,而每个用户的注册表条目将位于相应的配置单元中。您的应用程序第一次尝试写入其中一个时,操作将被重定向并写入一个 .dat 文件:
%localappdata%\Packages
阅读此扩展 introduction guide on MSIX 以了解有关应用在其容器内的行为方式的更多信息。