32비트 .NET 애플리케이션에서 64비트 레지스트리 항목에 액세스
64비트 Windows 시스템에서 실행되는 32비트 애플리케이션에서 64비트 레지스트리에 액세스하려면 특정 접근 방식이 필요합니다. 다행히 .NET Framework 4.x 이상 버전에서는 이를 기본적으로 지원합니다.
64비트 레지스트리 액세스를 위해 RegistryView 활용
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!