我有一个'遗留'XP应用程序,它在[ProgramFiles] \ [Application]文件夹中写入文件,并在HKLM \ Software \ [Application]路径中写入注册表项。在Windows Vista或Windows 7中运行应用程序时,文件和注册表项将改为Virtual Store。没关系;它还没有破坏任何东西。
现在,我们已经在.NET中重写了该应用程序。它只在“安全”,用户范围的位置读取和写入文件,并且我们使用指定了requestedExecutionLevel
的应用程序清单,以禁用注册表虚拟化。
当用户升级到最新版本时,我们希望通过从以前虚拟化的文件和注册表设置导入设置来保持与旧应用程序的兼容性。
所以,问题是:有没有办法从其清单中指定requestedExecutionLevel
的应用程序访问虚拟存储中的文件和注册表项?
答案 0 :(得分:1)
我想我已经把这个问题打开了足够长的时间。以下是我的发现。
似乎没有任何方法可以从同一进程访问虚拟存储和“真实”注册表和文件系统。虚拟存储会自动应用于未指定requestedExecutionLevel
的Windows应用程序,以及未作为“管理员”启动的应用程序。
然后,答案似乎是一个专门的“迁移”应用程序。此应用程序不会指定 requestedExecutionLevel
,从而保证在没有管理权限的情况下启动时,应用程序将被置于“虚拟存储”中。该应用程序分两个阶段运行:
理想情况下,此应用程序在某种程度上是通用的,在启动期间接受任何用户指定的注册表项和文件作为输入参数。