【发布时间】:2011-06-14 05:11:11
【问题描述】:
我无法理解 Vista 和/或 Windows 7 中注册表操作的 VirtualStore 虚拟化。我认为在以标准用户身份运行时尝试将某些内容写入 HKEY_LOCAL_MACHINE 根目录会提示 Windows 虚拟化操作并改为写入 HKEY_CURRENT_USER/Classes/VirtualStore/MACHINE。我已经看到几个较旧的应用程序的行为完全一样。
但是,当尝试在 C# 和 .Net4 中复制该行为时,对 HKLM 的写入操作会失败并出现 UnauthorizedAccessException。有没有办法强制虚拟化?
为这个问题提供一些背景信息:我正在尝试读取和操作最初由另一个旧应用程序创建的注册表项。在 Vista 或 Windows 7 中,这些将位于 VirtualStore 中。我想为 WinXP 及更高版本使用相同的注册表访问逻辑,并认为我的注册表操作将被虚拟化,与旧应用程序中的操作相同(因此将在相同的键上操作)。这没有按预期工作,我知道的唯一解决方法是专门访问 VirtualStore 路径,如果用户运行的是 Vista 或 7 并且启用了 UAC...看起来很丑,尤其是如果Microsoft 决定在未来的 Windows 版本中更改虚拟化行为。
【问题讨论】:
标签: c# registry virtualstore