首页 > 后端开发 > C++ > 如何从 32 位 .NET 应用程序访问 64 位注册表项?

如何从 32 位 .NET 应用程序访问 64 位注册表项?

Mary-Kate Olsen
发布: 2025-01-16 19:16:10
原创
791 人浏览过

How to Access 64-bit Registry Keys from a 32-bit .NET Application?

从 32 位 .NET 应用程序访问 64 位注册表项

从 64 位 Windows 系统上运行的 32 位应用程序访问 64 位注册表需要特定的方法。 幸运的是,.NET Framework 4.x 及更高版本对此提供了内置支持。

利用RegistryView进行64位注册表访问

RegistryView 枚举是区分 32 位和 64 位注册表访问的关键。 使用方法如下:

<code class="language-csharp">// Access the 64-bit registry
using Microsoft.Win32;

RegistryKey localKey64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey sqlServerKey64 = localKey64.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL");

// Access the 32-bit registry
RegistryKey localKey32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
RegistryKey sqlServerKey32 = localKey32.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL");</code>
登录后复制

检索特定注册表值

要检索特定值,例如“Instance NamesSQL”键下的“SQLEXPRESS”,请使用:

<code class="language-csharp">string sqlExpressKeyName = (string)sqlServerKey64.GetValue("SQLEXPRESS");</code>
登录后复制

综合密钥检索:结合 32 位和 64 位结果

对于需要来自 32 位和 64 位注册表位置的数据的情况,组合查询是有益的:

<code class="language-csharp">using System.Linq;

IEnumerable<string> GetAllRegValueNames(string regPath)
{
    var reg64 = GetRegValueNames(RegistryView.Registry64, regPath);
    var reg32 = GetRegValueNames(RegistryView.Registry32, regPath);
    var result = (reg64 != null && reg32 != null) ? reg64.Union(reg32) : (reg64 ?? reg32);
    return (result ?? new List<string>().AsEnumerable()).OrderBy(x => x);
}</code>
登录后复制

其中 GetRegValueNames 是一个辅助函数(未显示,但很容易实现),用于检索给定键下的值名称。 regPath 指定注册表路径。

用法示例:

<code class="language-csharp">
var sqlRegPath = @"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL";
foreach (var keyName in GetAllRegValueNames(sqlRegPath))
{
    Console.WriteLine(keyName);
}
```  This iterates through all found keys, regardless of whether they reside in the 32-bit or 64-bit registry hive.</code>
登录后复制

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板