Выбранный ответ неверен, так как он не соответствует тому, о чем просили. Вместо этого он проверяет, является ли процесс процессом x86, работающим в ОС x64; поэтому он вернет "false" для процесса x64 в ОС x64 или процесса x86, запущенного в ОС x86.
Кроме того, он неправильно обрабатывает ошибки.
Вот более правильный способ:
internal static class NativeMethods
{
// see https://msdn.microsoft.com/en-us/library/windows/desktop/ms684139%28v=vs.85%29.aspx
public static bool Is64Bit(Process process)
{
if (!Environment.Is64BitOperatingSystem)
return false;
// if this method is not available in your version of .NET, use GetNativeSystemInfo via P/Invoke instead
bool isWow64;
if (!IsWow64Process(process.Handle, out isWow64))
throw new Win32Exception();
return !isWow64;
}
[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool IsWow64Process([In] IntPtr process, [Out] out bool wow64Process);
}