본문 바로가기

Programming/Windows.C#

64bit 구별 방법

반응형

개발을 하다보면 32bit와 64bti용으로 제작 해야 될 때가 많죠~
그럴때 해당 PC가 어떤 플랫폼인지 구별해야할 때가 있는데 그럴때 사용하는 코드입니다.

방법1)
다음과 같이 kernel32에서 64bit인지 프로세스를 얻어내서 사용하는 방법이 있습니다.

[DllImport("kernel32.dll")] 
public static extern bool IsWow64Process(System.IntPtr hProcess, out bool lpSystemInfo); 
 
public static bool IsWow64Process1 
{ 
   
get 
   
{ 
       
bool retVal = false; 
       
IsWow64Process(System.Diagnostics.Process.GetCurrentProcess().Handle, out retVal); 
       
return retVal; 
   
} 
}

방법2)
IntPtr의 사이즈를 얻어서 구별하는 방법이 있습니다.

public bool Is64BitComputer()
{
if (IntPtr.Size == 8)
                return true;
            else
                return false;
}

방법1과 2를 결합하면 다음과 같습니다.

[DllImport("kernel32.dll", SetLastError = true, SetLastError CallingConvention = CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool IsWow64Process([In] IntPtr hProcess, [Out] out bool lpSystemInfo);

private bool Is64Bit()
{
    if (IntPtr.Size == 8 || (IntPtr.Size == 4 && Is32BitProcessOn64BitProcessor()))
        return true;
    else
        return false;
}

private bool Is32BitProcessOn64BitProcessor()
{
    bool retVal;

    IsWow64Process(Process.GetCurrentProcess().Handle, out retVal);

    return retVal;
}

참고 사이트

http://stackoverflow.com/questions/336633/how-to-detect-windows-64-bit-platform-with-net http://msdn.microsoft.com/ko-kr/library/system.intptr.size.aspx http://sbrich.tistory.com/372
반응형