2011-08-05 4 views
11

64 비트 PC에서 C#의 다음 레지스트리 키에 액세스 할 수 있는지 궁금합니다. 32 비트 PC에서 액세스 할 때 마이크로 소프트 \ 윈도우 \ CurrentVersion을 \ 실행 \C# 64 비트 레지스트리에 액세스

HKLM \ 소프트웨어는

그것을 잘 작동하지만, (64)에 재 - 다른이 HKLM \ 소프트웨어 \의 Wow6432Node의 네이티브 64 비트 경로에 지시 열쇠. 나는 이것에 대한 여러 기사를 살펴 봤지만 C#의 64 비트 PC에서 32 비트 키에 액세스하는 방법에 대한 확실한 답을 찾을 수 없습니다. 감사.

+1

.Net 프레임 워크의 어떤 버전을 대상으로합니까? – Justin

+0

VS 2010을 사용하고 있습니다. .NET 4 내가 추측 –

답변

5

응용 프로그램을 x64으로 컴파일하고 모두 잘되어야합니다. VC# Express에서

,이 건물은없는,하지만 당신은 여전히 ​​수 : 비주얼 스튜디오 2010에서는 VS 익스프레스 사용자의 Project Properties > Build

enter image description here

아래의 설정을 변경하여 그렇게 할 것 살펴볼 위치를 알고있는 경우 x86 구성을 만듭니다.

길쭉한 목록으로 보입니다.하지만 일단이 부분을 알고 계시다면 일이 훨씬 쉽습니다. VC# Express 만 있으면 누구나 이 유용 할 것입니다. 구성 관리자에 대해 알고 있으면 다음에 훨씬 직관적입니다.

  1. VC# Express에서 도구 -> 옵션으로 이동하십시오.
  2. 옵션 대화 상자의 왼쪽 하단에서 의 "모든 설정 표시"라는 상자를 선택하십시오.
  3. 왼쪽의 트리보기에서 "프로젝트 및 솔루션"을 선택하십시오.
  4. 오른쪽의 옵션에서 " 고급 빌드 구성 표시"확인란을 선택하십시오.
  5. 확인을 클릭하십시오.
  6. 빌드 -> 구성 관리자 ...
  7. 프로젝트 옆의 플랫폼 열에서 콤보 박스를 클릭하고 ""을 선택하십시오.
  8. "새 플랫폼"설정에서 "x64"를 선택하십시오.
  9. 확인을 클릭하십시오.
  10. 닫기를 클릭하십시오.
  11. 이제 x64 구성을 갖게되었습니다! 파이처럼 쉽게! :-)
+0

Visual Studio Pro에 대해서만 감사합니다. Express를 사용하고 있으며 해당 옵션을 찾을 수 없습니까? –

+0

@Bali, http://forums.create.msdn.com/forums/t/4377.aspx#22601에서 개정 된 지침에 따라 답변을 편집했습니다. 계속해서 시도해보십시오 :) – foxy

+0

감사합니다. –

1

리디렉션한다고 가정합니다. 이 리디렉션을 감지하고 대신 WoW6432Node 키를 읽어야합니다. HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run은 64 비트 응용 프로그램에서만 액세스 할 수있는 64 비트 레지스트리입니다.

분명히 shoudl은 둘 다 지원하는 코드를 작성합니다.

+0

이 잘못되었다는 것을 알려 주어서 고맙다. 이것은 64라는 쉘에 의해 읽혀지는 키이다. bit –

+0

@ David - 당신의 의견에 동의해야합니다. HKLM \ SOFTWARE \ Wow6432Node 로의 리디렉션은 32 비트 응용 프로그램에서 알 수 없습니다. 당신이 내 대답에 설명을 추가 할 수 있다고 느낀다면 (내가 틀렸다는 근거없는 주장 대신에) 그것을 고맙게 생각할 것입니다. –

+0

당신이 옳은지 나는 분명하지 않습니다. 죄송합니다. 'HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Run'은 의미없는 키입니다. 쉘은'HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run'의 값을 읽습니다. 32 비트 영역의 값을 잘못 읽는 프로그램으로 읽어 들일 수는 있지만 64 비트 섹션에 값을 쓰는 올바른 위치 일 수 있습니다. –

2

당신은 그 뒤로 거쳐야합니다. Wow6432Node는 32 비트 어플리케이션 용입니다. 따라서 응용 프로그램이 32 비트 (x86)이면 자동으로 해당 "노드"로 리디렉션됩니다.

.NET 4에서 FromHandle 메서드를 사용하여 사용할 뷰를 지정할 수 있지만 사용법이 명확하지 않으며 problems이있을 수 있습니다.

answer은 Win32 API를 사용하여이 질문을 처리합니다.이 API는 C#에서도 활용할 수 있습니다.

13

.Net Framework 버전 4.0 이상을 타겟팅하는 경우 원하는 레지스트리 키를 열 때 RegistryView.Registry32 값을 전달하면됩니다.

.Net Framework의 이전 버전을 대상으로하는 경우 P/Invoke를 사용하여 RegOpenKeyEx을 직접 호출해야 KEY_WOW64_32KEY 플래그를 전달할 수 있습니다. 탭, 플랫폼 대상 = 모든 CPU를 구축

+0

Brill, cheers !!! –

5

프로젝트 + 속성 :

더 많은 내용이수록되어 여기에 가이드가있다. 32 비트 응용 프로그램에서 64 비트 레지스트리에 액세스하려면 .NET 4와 RegistryView.Registry64 옵션이있는 새 RegistryKey.OpenBaseKey() 메서드가 필요합니다.

이 경우에만 키를 읽을 수 있으며 키 값을 쓰려면 UAC 고도가 필요합니다. 레지스트리 리디렉션을받지 않고도 권한 상승없이 HKCU에 쓸 수 있습니다.

관련 문제