从 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>
重要注意事项:
RegistryView.Registry32
是推荐且更直接的方法。RegisteredOrganization
值错误地返回“Microsoft”。 64 位代码将返回正确的组织。GetAllRegValueNames()
函数允许检索所有键名称和值,无论注册表视图(32 位或 64 位)如何。??
) 优雅地处理潜在的空值。以上是32位应用程序如何访问Windows中的64位注册表?的详细内容。更多信息请关注PHP中文网其他相关文章!