.NET 응용 프로그램 (모든 CPU)은 32 비트 프로그램에서 만든 레지스트리 값을 읽어야합니다. 64 비트 Windows에서는 레지스트리의 Wow6432Node 키를 사용합니다. Wow6432Node를 하드 코딩해서는 안된다는 것을 읽었으므로 .NET을 사용하여 액세스하는 올바른 방법은 무엇입니까?64 비트 .NET 응용 프로그램에서 WOW64 레지스트리 키를 여는 방법
답변
64 비트 프로그램에서 32 비트 프로그램에 의해 작성된 값을 명시 적으로 읽어야하는 경우 하드 코딩하는 것이 좋습니다. 단순히 다른 옵션이 없기 때문입니다.
물론 헬퍼 함수로 추상화합니다. 예를
public RegistryKey GetSoftwareRoot() {
var path = 8 == IntPtr.Size
? @"Software\Wow6432Node"
: @"Software";
return Registry.CurrentUser.OpenSubKey(path);
}
의 올바른 방법은 기본 레지스트리 API를 호출하고 앤더스의 답변을 확장 RegOpenKeyEx/RegCreateKeyEx
이 솔루션은 pinvoking 또는 C++ 코드를 사용할 때만 유효합니다. – Kyle
@Zenox - C#과 같은 언어를 사용하는 경우에도 완벽하게 유효한 솔루션입니다. 물론 사용하는 것은 어리석은 일입니다. –
에 KEY_WOW64_32KEY
플래그를 전달하는 것입니다하는 good example of wrapping the resulting handle in a .NET RegistryKey object on Shahar Prish's blog있다 -도 불구하고 코멘트를 읽으십시오.
약화되지 않은 the pinvoke.net wrapper of RegOpenKeyEx의 사용에는 문제가 있습니다.
이것은 훌륭한 솔루션입니다. – adzm
대상 .Net 버전을 v4로 변경할 수 있으면 새로운 OpenBaseKey 기능을 사용할 수 있습니다. 예 :
RegistryKey registryKey;
if (Environment.Is64BitOperatingSystem == true)
{
registryKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);
}
else
{
registryKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32);
}
- 1. 네이티브 Windows API를 사용하여 32 비트 응용 프로그램에서 64 비트보기로 레지스트리 키를 만드는 방법
- 2. WoW64 및 x64 프로세스에 대한 공유 레지스트리 키를 만드는 방법
- 3. 64 비트 .Net 응용 프로그램에서 가져 오는 32 비트 dll
- 4. 32 비트 응용 프로그램에서 64 비트 레지스트리에 액세스
- 5. Windows 64 비트 레지스트리 v.s. 32 비트 레지스트리
- 6. SHGetSpecialFolderPath, 32 비트 응용 프로그램에서 64 비트 CSIDL에 액세스하는 방법
- 7. 64 비트 응용 프로그램에서 32 비트 dll을 사용하는 방법
- 8. .NET 응용 프로그램에서 API 키를 보호하는 방법
- 9. 32 비트 swt eclipse rcp 응용 프로그램에서 64 비트 OLE로드
- 10. 고유 한 64 비트 키를 생성하는 방법
- 11. 32 비트 응용 프로그램에서 64 비트 dll (64 비트 OS)을 등록하는 방법
- 12. 32 비트 응용 프로그램에서 "관련이없는"64 비트 응용 프로그램
- 13. 64 비트 .NET 코드에서 64 비트 C++ 디버깅 - 방법?
- 14. 64 비트 응용 프로그램에서 32 비트 오라클 클라이언트
- 15. 64 비트 응용 프로그램에서 32 바이너리 호출
- 16. 윈도우 64 레지스트리 Wow6432node 내 키를 생성하고
- 17. C# 32bit 앱 64 비트 레지스트리
- 18. .NET 4에서만 64 비트
- 19. 레지스트리 키를 제거하는 방법?
- 20. 64 비트 프로세서의 .net 2.0 응용 프로그램?
- 21. VBS Windows 64 비트/32 비트 레지스트리 읽기 문제
- 22. 32 비트 응용 프로그램에서 64 비트 드라이버 사용
- 23. 64 비트 응용 프로그램에서 32 비트 공유 라이브러리를로드 하시겠습니까?
- 24. 64 비트 대상 응용 프로그램에서 32 비트 lib 파일 호출
- 25. 레지스트리 항목에서 레지스트리 값과 키를 제거하는 방법
- 26. 응용 프로그램에서 키를 숨기는 방법?
- 27. .NET Reactor - 64 비트 어셈블리를 보호하는 방법
- 28. 32 비트 또는 64 비트 dll로 .net 응용 프로그램을 컴파일
- 29. 내 .net 오프라인 응용 프로그램에서 웹 페이지를 여는 방법?
- 30. .net 64 비트 참조 문제
충분히 공정하게 - 감사합니다. Jared! – marijne
경고 : MS는이 접근법 ("Wow6432Node"하드 코딩)이 지원되지 않는다고 말합니다. http://msdn.microsoft.com/en-us/library/aa384232(VS.85).aspx – Richard
-1 : Windows 7/Windows Server 2008 R2에서 공유 레지스트리 키를 대신 사용하므로이 동작이 중단됩니다. http : //msdn.microsoft.com/en-us/library/aa384253 (VS.85) .aspx – Powerlord