> 백엔드 개발 > C++ > 내 32비트 응용 프로그램이 64비트 레지스트리 키 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall에 액세스할 수 없는 이유는 무엇입니까?

내 32비트 응용 프로그램이 64비트 레지스트리 키 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall에 액세스할 수 없는 이유는 무엇입니까?

DDD
풀어 주다: 2025-01-05 16:19:41
원래의
178명이 탐색했습니다.

Why Can't My 32-bit Application Access the 64-bit Registry Key HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall?

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿