OpenSubKey()가 레지스트리에서 예상 하위 키를 검색하지 못함
다음 레지스트리 경로 내에서 모든 하위 키 표시 이름을 검색하려고 할 때:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
제공된 코드를 사용하면 특정 하위 키가 접근 가능:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
이 하위 키에는 "Microsoft Visual C 2010 x64 Redistributable - 10.0.30319"라는 이름이 표시되어야 합니다. 그러나 GetSubKeyNames() 메서드는 다른 하위 키를 검색합니다.
{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}.KB2151757
원인
64비트 OS의 32비트 애플리케이션은 HKLMSoftwareWow6432Node에서 읽습니다. 기본적으로 노드. 이 문제를 해결하고 64비트 버전의 키에 액세스하려면 RegistryView를 지정해야 합니다.
using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)) using (var key = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")) { // key now points to the 64-bit key }
이 API는 .NET 4.0에서 도입되었습니다. .NET 3.5의 경우 P/Invoke가 필요합니다:
http://www.rhyous.com/2011/01/24/how-read-the-64-bit-registry-from-a-32 -비트-응용 프로그램 또는 그 반대/
위 내용은 OpenSubKey()가 64비트 시스템에서 예상 레지스트리 하위 키를 검색하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!