注册表键映射

问题描述:

我正在构建一个应用程序,我需要能够从用户的本地注册表中收集信息,然后利用它执行各种任务。我知道某个注册表项所在的位置,但似乎无法弄清楚如何正确提取数据。这里是我想要提取的那个:注册表键映射

我的理想事件会发生如下:实用程序搜索注册表值,确定它并将其存储(在var或某物中),然后将按钮显示给用户进入下一个屏幕(我正在使用WinForms)。我已经事先将按钮设置为“不可见”。请参阅附件中的代码。

enter image description here

using (RegistryKey key = Registry.LocalMachine.OpenSubKey("HKEY_LOCAL_MACHINE\Software\Wow6432Node\DovetailGames\FSX\10.0")) 
{ 
    if (key != null) 
    { 
     Object o = key.GetValue("Install_Path"); 

     if (o != null) 
     { 
      sc3op2.Visible = true; //Button is "sc3op2" 
     } 
    } 
} 

我想我的主要问题是代码提取这些值的格式。任何帮助,将不胜感激。谢谢。

+1

不知道,但我觉得你的问题是,你需要从“路径”删除'HKEY_LOCAL_MACHINE'使用,因为用'Regisrty.LocalMachine'你已经在HKEY_LOCAL_MACHINE –

+0

@GianPaolo那本身并不起作用,但我明白了为什么这是错误的,我会把它拿出来,但没有运气。 – guisbonddev

+0

代码中的路径在最后包含'10.0'类别,它与缺失截图不同。这是故意的吗? –

您的答案可能是here。显然,它与32位和64位平台的应用程序设置的虚拟化有关。请参阅更新部分If it returns null, set your build architecture to Any CPU。在我的64位平台上,当使用x86或任何CPU构建配置构建时,我会变为空。但是它在使用x64构建时返回值。

const string keyName = @"Software\Wow6432Node\DovetailGames\FSX"; 
var o = Registry.LocalMachine.OpenSubKey(keyName, false); 
var value = o?.GetValue("Install_Path", "-"); 
Console.WriteLine(value); 

首先您需要删除HKEY_LOCAL_MACHINE。 您需要在字符串前使用@。

看看Screenshot

using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Apple Inc.\Apple Application Support")) 
     { 
      if (key != null) 
      { 
       Object o = key.GetValue("Installdir"); 

       if (o != null) 
       { 
        // do something 
       } 
      } 
     }