32 비트 코드에서 64 비트로 Windows 프로세스를 시작하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/162309

  •  03-07-2019
  •  | 
  •  

문제

HKLM 레지스트리 하이브에 쓸 때 Vista에서 UAC 대화 상자를 나타 내려면 Vista 권한이 부족할 때 Win32 Registry API를 사용하지 않기로 결정합니다. 전체 응용 프로그램이 관리자 권한과 재개해야합니다. 대신, 우리는이 트릭을 수행합니다.

ShellExecute(hWnd, "runas" /* display UAC prompt on Vista */, windir + "\\Reg", "add HKLM\\Software\\Company\\KeyName /v valueName /t REG_MULTI_TZ /d ValueData", NULL, SW_HIDE);

이 솔루션은 우리의 애플리케이션이 32 비트 인 것 외에도 잘 작동하며 WOW 호환성 계층을 사용하여 32 비트 앱이므로 Reg.Exe 명령을 실행합니다! :( reg.exe가 명령 줄에서 실행되면 64 비트 모드로 올바르게 실행됩니다. 32 비트 앱으로 실행되면 레지스트리 키가 잘못된 위치에있게되므로 중요합니다. 레지스트리 반사.

그렇다면 32 비트 앱에서 프로그래밍 방식으로 64 비트 앱을 시작하고 부모 32 비트 프로세스와 같은 WOW64 서브 시스템을 사용하여 실행하지 않아도됩니다 (즉, 작업 관리자의 "*"접미사)?

도움이 되었습니까?

해결책

이것을 시도하십시오 (32 비트 프로세스에서) :

> %WINDIR%\sysnative\reg.exe query ...

(그것을 발견했습니다 여기).

다른 팁

32 비트 또는 64 비트 기본 (관리되지 않은) 프로그램이 실행되는지 여부는 실행 파일에만 달려 있습니다. 두 개의 사본이 있습니다 reg.exe, C : Windows System32 (64 비트) 및 C : Windows Syswow64 (32 비트). 당신은 경로를 지정하지 않기 때문에, 당신은 PATH 32 비트 프로세스의 32 비트 버전 인 환경 변수.

이 기능을 실제로 별도의 프로그램 또는 COM 객체로 고려하고 프로그램을 매니페스트로 표시하거나 com elvation moniker.

레지스트리를 업데이트하기 위해 작은 "도우미"응용 프로그램을 작성하는 것을 고려해 보셨습니까? 64 비트로 컴파일하고 관리자 권한이 필요하다는 매니페스트를 포함하면 두 기반을 모두 포함합니다.

실행중인 OS의 "Bitness"를 감지하여 registryupdate32.exe 및 registryupdate64.exe를 모두 컴파일하고 관련 텐트를 호출 할 수있는 API가 있습니다.

내가 나 자신을위한 솔루션으로 수행 한 한 가지는 리디렉션을 비활성화하는 것입니다.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365744(v=vs.85).aspx

언제든지 다시 켜질 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top