Ответ 1
if (IntPtr.Size == 8)
{
// 64 bit machine
}
else if (IntPtr.Size == 4)
{
// 32 bit machine
}
Как узнать, работает ли мое приложение (скомпилированное в Visual Studio 2008 как Any CPU) как 32-разрядное или 64-битное приложение?
if (IntPtr.Size == 8)
{
// 64 bit machine
}
else if (IntPtr.Size == 4)
{
// 32 bit machine
}
Если вы используете .NET 4.0, это однострочный для текущего процесса:
Environment.Is64BitProcess
Ссылка: Свойство Environment.Is64BitProcess (MSDN)
Я нашел этот код из Martijn Boven, который делает трюк:
public static bool Is64BitMode() {
return System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)) == 8;
}
Этот образец кода из Microsoft All-In-One Code Framework может ответить на ваш вопрос:
Обнаружение запущенной платформы процесса в С# (CSPlatformDetector)
Пример кода CSPlatformDetector демонстрирует следующие задачи: связанные с обнаружением платформы:
- Определите имя текущей операционной системы. (например, "Microsoft Windows 7 Enterprise" )
- Обнаружить версию текущей операционной системы. (например, "Microsoft Windows NT 6.1.7600.0" )
- Определите, является ли текущая операционная система 64-разрядной операционной системой.
- Определите, является ли текущий процесс 64-битным процессом.
- Определите, является ли произвольный процесс, выполняющийся в системе 64-разрядным.
Если вы просто хотите определить, является ли текущий выполняемый процесс 64-разрядным процесс, вы можете использовать свойство Environment.Is64BitProcess, которое является новым в .NET. Рамки 4.
И если вы хотите определить, выполняется ли произвольное приложение в системе
это 64-битный процесс, вам необходимо определить бит операционной системы, и если он 64-битный,
вызовите IsWow64Process()
с дескриптором целевого процесса:
static bool Is64BitProcess(IntPtr hProcess)
{
bool flag = false;
if (Environment.Is64BitOperatingSystem)
{
// On 64-bit OS, if a process is not running under Wow64 mode,
// the process must be a 64-bit process.
flag = !(NativeMethods.IsWow64Process(hProcess, out flag) && flag);
}
return flag;
}
В стандарте .Net вы можете использовать System.Runtime.InteropServices.RuntimeInformation.OSArchitecture