我无法理解 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 版本。