首頁 >後端開發 >C++ >如何從 32 位元 .NET 應用程式存取 64 位元註冊表項?

如何從 32 位元 .NET 應用程式存取 64 位元註冊表項?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-16 19:16:10794瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn