访问Windows注册表LOCAL_MACHINE中的密钥

Jas*_*n94 1 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);
}
Run Code Online (Sandbox Code Playgroud)

Joe*_*ite 5

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

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

在64位操作系统上,32位应用程序拥有自己的HKLM\Software虚拟副本.MS出于兼容性原因这样做,因此32位应用程序不会踩到64位应用程序的设置.因此,当您的32位应用程序寻找HKLM\Software时,它实际上正在获得HKLM\Wow6432Node\Software.

四个简单的解决方案:

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