문제

WMI 클래스 Win32_OperatingSystem에는 Windows Vista의 OSArchitecture만 포함되어 있으므로 레지스트리를 사용하여 현재 시스템이 32비트 시스템인지 64비트 시스템인지 확인하는 방법을 빠르게 작성했습니다.

private Boolean is64BitOperatingSystem()
{
    RegistryKey localEnvironment = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment");
    String processorArchitecture = (String) localEnvironment.GetValue("PROCESSOR_ARCHITECTURE");

    if (processorArchitecture.Equals("x86")) {
        return false;
    }
    else {
        return true;
    }
}

지금까지는 꽤 잘 진행되었지만 레지스트리를 살펴보는 것이 얼마나 마음에 드는지 잘 모르겠습니다.이것은 꽤 표준적인 관행입니까, 아니면 더 나은 방법이 있습니까?

편집하다:와, 미리보기로 보니 그 코드가 훨씬 더 예뻐 보이네요.다음에는 페이스트빈 같은 것에 연결하는 것을 고려해 보겠습니다.

도움이 되었습니까?

해결책

Raymond Chens 솔루션을 살펴보십시오.

64비트 Windows에서 실행 중인지 프로그래밍 방식으로 감지하는 방법

.NET용 PINVOKE는 다음과 같습니다.

IsWow64Process(커널32)

업데이트: 'x86'을 확인하는 데 문제가 있습니다.Intel이나 AMD의 다음 32비트 프로세서가 무엇으로 지정될지 누가 말할 수 있습니까?확률은 낮지만 위험합니다.외부 세계에 불투명하다고 간주될 수 있는 OS 버전/플랫폼별 값이 무엇인지 쿼리하는 것이 아니라 올바른 API를 통해 이를 결정하도록 OS에 요청해야 합니다.스스로에게 질문해 보십시오. 1 - 관련 레지스트리 항목이 MS에서 적절하게 문서화되어 있습니까? 2 - 그렇다면 MS에서 실행 여부 사이에 정보를 바탕으로 결정을 내릴 수 있도록 개발자로서 보장되는 가능한 값의 최종 목록을 제공합니다. 32비트 또는 64비트.대답이 '아니오'라면 API를 호출하세요. 예, 좀 더 길지만 문서화되어 있고 확실합니다.

다른 팁

.NET에서 64비트를 테스트하는 가장 쉬운 방법은 IntPtr.Size 값을 확인하는 것입니다.

WOW에서 실행되는 32비트 앱의 경우 IntPtr.Size 값이 4라고 생각합니다. 그렇지 않습니까?

편집하다:@편집하다:응.:)

.NET에서 64비트를 테스트하는 가장 쉬운 방법은 IntPtr.Size 값을 확인하는 것입니다.

편집하다:맙소사!이는 OS 전체가 아닌 현재 프로세스가 64비트인지 여부를 알려줍니다.죄송합니다!

애플리케이션 사용자가 항상 필요한 항목에 액세스할 수 있다는 것을 확신할 수 있는 한 레지스트리를 조사하는 것은 완벽하게 유효합니다.

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