我们有一个访问注册表的遗留应用程序。因为它是一个 32 位应用程序,它在引用 HKEY_LOCAL_MACHINE\Software 时通过注册表虚拟化访问 Windows 7 中的注册表。 我的问题是我们需要修改 Visual Studio 中的哪些设置来编译我们的应用程序,在这些应用程序中他们“正常”访问注册表而不通过注册表虚拟化?
问问题
627 次
3 回答
1
如果您仔细阅读注册表虚拟化页面,您会注意到虚拟化不仅限于 64 位 Windows。它只声明只有 32 位进程将被虚拟化。但虚拟化是在 32 位和 64 位 Vista 及更高版本上完成的。所以问题标题和 x64 标签有点误导。
为了回答您的问题,同一页面显示:“注册表虚拟化已针对以下各项禁用:...在其清单中指定了 requestExecutionLevel 的进程。”
因此,您可以通过将清单文件添加到指定其执行级别的可执行文件来禁用虚拟化。至少有一篇关于如何在 Visual Studio 2005 中执行此操作的 Microsoft 知识库文章:http: //support.microsoft.com/kb/944276。
于 2010-03-30T20:34:22.073 回答
0
你为什么不使用:
Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\...");
return (string)key.GetValue("blah");
并在 customtrust.config 文件中添加对注册表的访问权限。
还是在 Windows 7 中不起作用?
于 2010-03-30T15:49:00.327 回答
0
解决方案是将遗留应用程序编译为以 x64 为目标。明确针对 x64 的应用程序将不受注册表虚拟化的约束。
于 2010-04-15T20:26:01.123 回答