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