OpenSubKey()에서 레지스트리 키를 열 수 없습니다
레지스트리 키 HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall 내에서 하위 키에 대한 표시 이름을 검색하려고 할 때 코드:
RegistryKey newKey; string val; string KeyPath64Bit = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; RegistryKey mainKey = Registry.LocalMachine.OpenSubKey(KeyPath64Bit); string[] RegKeys64Bits = Registry.LocalMachine.OpenSubKey(KeyPath64Bit).GetSubKeyNames(); foreach (string s in RegKeys64Bits) { newKey = mainKey.OpenSubKey(s); val = newKey.GetValue("DisplayName", -1, RegistryValueOptions.None).ToString(); if (val != "-1") file64.WriteLine(val); }
특정 하위 키인 {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}는 아직 파악하기 어렵습니다. 대신 GetSubKeyNames()는 표시 이름이 없는 하위 키인 {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}.KB2151757을 반환합니다.
원인:
64비트 운영 체제, 32비트 애플리케이션은 기본적으로 HKLMSoftwareWow6432Node 레지스트리 키에 액세스합니다. 원하는 하위 키가 포함된 64비트 버전의 키를 검색하려면 RegistryView.Registry64를 지정해야 합니다.
해결책:
.NET 4.0 이상에서는 RegistryView를 사용하여 64비트 레지스트리 키를 열 수 있습니다. 속성:
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 }
.NET 3.5의 경우 P/Invoke를 활용하여 64비트 키에 액세스할 수 있습니다. 자세한 지침은 다음 링크의 문서를 참조하세요.
http://www.rhyous.com/2011/01/24/how-read-the-64-bit-registry-from-a- 32비트 애플리케이션 또는 그 반대/
위 내용은 내 32비트 응용 프로그램이 64비트 레지스트리 키 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall에 액세스할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!