我可以从非虚拟化的应用程序访问Windows虚拟商店中的文件和注册表项吗?

本文关键字:文件 注册表 虚拟 虚拟化 应用程序 访问 我可以 Windows | 更新日期: 2023-09-27 17:51:12

我有一个'legacy' XP应用程序,它在[ProgramFiles]'[application]文件夹中写入文件,并在HKLM'Software'[application]路径中写入注册表项。当在Windows Vista或Windows 7中运行应用程序时,文件和注册表项被写入虚拟商店中。这很好;它还没有破坏任何东西。

现在,我们已经用。net重写了应用程序。它只在"安全的"用户范围内的位置读写文件,我们使用指定了requestedExecutionLevel的应用程序清单,以禁用注册表虚拟化。

当用户升级到最新版本时,我们希望通过从以前虚拟化的文件和注册表设置中导入设置来保持与旧应用程序的兼容性。

那么,问题是:是否有一种方法可以从在其清单中指定了requestedExecutionLevel的应用程序访问虚拟商店中的文件和注册表项?

我可以从非虚拟化的应用程序访问Windows虚拟商店中的文件和注册表项吗?

我想我已经把这个问题留得够久了。以下是我的发现。

似乎没有任何方法可以从同一进程访问虚拟商店和"真实"注册表和文件系统。虚拟商店自动应用于没有指定requestedExecutionLevel的Windows应用程序,并且没有以"管理员"身份启动。

那么,答案似乎是一个专门的"迁移"应用程序。此应用程序将不指定 requestedExecutionLevel,从而保证在没有管理权限的情况下启动应用程序时将该应用程序放入"虚拟商店"中。应用程序分两个阶段运行:
  1. 在没有管理权限的情况下启动应用程序。应用程序将从虚拟商店读取所需的注册表项和文件系统文件,并将它们保存在某个临时(非虚拟化)位置,如用户的AppData目录。
  2. 管理访问权限重新启动应用程序。应用程序实际上可以自己自动地完成这些工作,以简化流程。应用程序现在可以访问"真正的"注册表和文件系统。应用程序将保存从虚拟商店备份的注册表项和文件,将它们保存到所需的"真实"位置。

理想情况下,这个应用程序应该是通用的,在启动时接受任何用户指定的注册表项和文件作为输入参数。