2010-10-06 48 views
1

我在HKEY_LOCAL_MACHINE \ Software \ MyAppName(使用regedit(ive rebootet))中创建了一个密钥,但是当我试图列出他们全部“MyAppName”不显示... :(任何线索?在Windows注册表中访问一个密钥LOCAL_MACHINE

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

创建“MyAppName”键的代码在哪里? – 2010-10-06 12:40:38

回答

5

我将运用我的心理调试的权力,你猜,你有(一)64位操作系统,以及(b)Visual Studio 2010中

默认情况下,当您在VS2010中创建一个新的可执行项目时,它将设置为x86平台构建的项目选项(Visual Studio的早期版本的目标是“任何平台”,它将在32位操作系统上与x86代码进行JIT,以及x64代码在...上64位操作系统。但是这引起了其他的麻烦,所以他们在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。
  • 将您的项目选项更改为“任何平台”(在“项目选项”>“生成”选项卡中)。确保将其设置为调试和发布。
+0

你的精神力量比我的好......令人印象深刻。 – 2010-10-06 12:46:42

+0

你的心灵调试能力是现货! – Jason94 2010-10-06 12:50:20

0

不是很挑剔,但实际位置是HKLM \ SOFTWARE \ Wow6432Node。乔回答的其他一切都是现货。