>백엔드 개발 >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 이상 버전에서는 이를 기본적으로 지원합니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.