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