【问题标题】:OpenSubKey under HKLM\Software returning nullHKLM\Software 下的 OpenSubKey 返回 null
【发布时间】:2011-04-09 00:44:05
【问题描述】:

这是我的代码:

Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\ADM");

该注册表项存在于机器上。键始终为空。

我不认为这是一个安全问题。我以管理员身份运行。 (我什至明确地在管理员模式下运行程序集)。

我使用的是在 64 位 Windows 7 上运行的 Visual Studio 2010。

【问题讨论】:

    标签: c# registry


    【解决方案1】:

    问题是我运行的是 64 位,而我的应用程序编译为 32 位。

    正在读取的密钥:

    Microsoft.Win32.RegistryKey key = 
        Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE");
    

    不是HKLM\SOFTWARE,而是HKLM\SOFTWARE\Wow6432Node\。将应用程序编译为 x64 即可解决问题。

    【讨论】:

      【解决方案2】:

      尝试像这样单独打开每个注册表项

      Microsoft.Win32.RegistryKey key1 = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE");
      Microsoft.Win32.RegistryKey key2 = key1.OpenSubKey(@"ADM");
      

      而不是使用字符串@"SOFTWARE\ADM";

      【讨论】:

        【解决方案3】:

        我已经用不同的应用程序名称(我有一个密钥)运行了您的代码,一切正常,所以代码没问题,但我在 Win XP 上对此进行了测试。

        在研究写入注册表时,我发现这篇关于 Windows 7 中 registry virtualization 的文章可能会导致您的问题:

        Windows Vista 和更高版本的 Windows 通过自动重定向这些操作来提高这些应用程序的应用程序兼容性。例如,对全局存储 (HKEY_LOCAL_MACHINE\Software) 的注册表操作被重定向到用户配置文件中称为虚拟存储 (HKEY_USERS\_Classes\VirtualStore\Machine\Software) 的每个用户位置。

        【讨论】:

          猜你喜欢
          • 2012-07-10
          • 1970-01-01
          • 2011-06-08
          • 1970-01-01
          • 2015-03-31
          • 2012-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多