Mar*_*rio 6 c# registry virtualstore
我无法理解Vista和/或Windows 7中注册表操作的VirtualStore虚拟化.我认为在以标准用户身份运行时尝试将某些内容写入HKEY_LOCAL_MACHINE根目录会提示Windows虚拟化操作并写入HKEY_CURRENT_USER/Classes/VirtualStore /而是机器.我已经看到几个较旧的应用程序的行为完全相同.
但是,当尝试在C#和.Net4中复制该行为时,对HKLM的写入操作失败,而是使用UnauthorizedAccessException.有没有办法强制虚拟化?
为这个问题提供一些上下文:我正在尝试阅读和操作最初由另一个遗留应用程序创建的注册表项.在Vista或Windows 7中,这些将位于VirtualStore中.我想为WinXP及以上版本使用相同的注册表访问逻辑,并认为我的注册表操作将与旧版应用程序中的操作一样虚拟化(并且会因为相同的键而操作).这不能按预期工作,我知道的唯一解决方法是专门访问VirtualStore路径,如果用户运行Vista或7并启用了UAC ......但是,看起来很难看,特别是如果微软决定更改虚拟化行为未来的Windows版本.
MSDN 文章Windows Vista 中的注册表虚拟化解释了某些类别的进程已禁用虚拟化:
对于 .NET 应用程序,前两者之一或两者通常都适用(由于编译器提供的默认清单)。您必须删除清单(以便您的应用程序看起来像旧版应用程序)才能启用虚拟化,但这将是一个坏主意(对于与 Windows 的向前兼容性)。相反,只需假设您的应用程序未在 Vista(及更高版本)上进行虚拟化,然后进行相应操作。
此外,文章还警告说,“微软打算从 Windows 操作系统的未来版本中删除这种形式的虚拟化……您的应用程序必须不要对系统中虚拟化的存在产生硬依赖。” 无论您编写什么代码,都应该预见到 VirtualStore 密钥可能不存在于未来版本的 Windows 上。