首页 >后端开发 >C++ >32位应用程序如何访问Windows中的64位注册表?

32位应用程序如何访问Windows中的64位注册表?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-16 19:05:10311浏览

How Can a 32-bit Application Access the 64-bit Registry in Windows?

从 32 位 Windows 应用程序访问 64 位注册表

挑战:

32 位应用程序在 64 位 Windows 系统上访问 64 位注册表时遇到困难。当从 64 位构建服务器上运行的 32 位单元测试访问驻留在 64 位注册表中的系统信息(例如 SQL Express 实例的路径)时,经常会出现此问题。

解决方案:

访问 64 位注册表:

RegistryView.Registry64 属性提供了从 32 位应用程序访问 64 位注册表的解决方案。 以下代码演示了这一点:

<code class="language-csharp">RegistryKey localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey sqlServerKey = localKey.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL");
string sqlExpressKeyName = (string)sqlServerKey.GetValue("SQLEXPRESS");</code>

访问 32 位注册表:

相反,要访问 32 位注册表,请使用 RegistryView.Registry32:

<code class="language-csharp">RegistryKey localKey32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
RegistryKey sqlServerKey32 = localKey32.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL");
string sqlExpressKeyName = (string)sqlServerKey32.GetValue("SQLEXPRESS");</code>

重要注意事项:

  • 虽然 32 位注册表可以通过 64 位注册表中的“Wow6432Node”访问,但使用 RegistryView.Registry32 是推荐且更直接的方法。
  • Windows 7(64 位)中的一个已知错误可能会导致从 32 位代码访问时 RegisteredOrganization 值错误地返回“Microsoft”。 64 位代码将返回正确的组织。
  • GetAllRegValueNames() 函数允许检索所有键名称和值,无论注册表视图(32 位或 64 位)如何。
  • 利用空合并运算符 (??) 优雅地处理潜在的空值。

以上是32位应用程序如何访问Windows中的64位注册表?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn