访问Windows注册表LOCAL_MACHINE中的密钥

时间:2010-10-06 12:33:32

标签: c# windows registry

我在HKEY_LOCAL_MACHINE \ Software \ MyAppName(使用regedit(ive rebootet))中创建了一个密钥,但是当我尝试列出它们时,所有“MyAppName”都没有显示...... :(任何线索?

rkey = Registry.LocalMachine.OpenSubKey("Software");
foreach (string subkey in rkey.GetSubKeyNames())
{
WriteToLogFile("subkey: " + subkey);
}

2 个答案:

答案 0 :(得分:5)

我将应用我的通灵调试功能,并猜测你有(a)64位操作系统,以及(b)Visual Studio 2010。

默认情况下,在VS2010中创建新的可执行项目时,它会设置要为x86平台构建的项目选项。 (Visual Studio的早期版本针对“任何平台”,它将在32位操作系统上JIT到x86代码,在64位操作系统上使用x64代码。但这会引起其他麻烦,所以他们在VS2010中changed the default 。)

在64位操作系统上,32位应用程序具有their own virtualized copy of HKLM\Software。 MS出于兼容性原因这样做,因此32位应用程序不会踩到64位应用程序的设置。因此,当您的32位应用程序寻找HKLM \ Software时,它实际上正在获得HKLM \ Wow6432Node \ Software。

四个简单的解决方法:

  • 将您的应用程序保留为32位,但explicitly request the 64-bit Registry。这可能是最简单的解决方案。
  • 当您进入RegEdit时,请在HKLM \ Wow6432Node \ Software下创建您的密钥。
  • 如果要从安装程序创建注册表项,请使用32位安装程序。然后它将写入它所看到的HKLM \ Software,它实际上是HKLM \ Wow6432Node \ Software。
  • 将项目选项更改为“任意平台”(在项目选项>构建选项卡中)。确保将其设置为调试和发布。

答案 1 :(得分:0)

不是挑剔,但实际位置是 HKLM \ SOFTWARE \ Wow6432Node 。乔回答的其他所有事情都在现场。