A resposta selecionada está incorreta porque não cumpre o que foi pedido. Ele verifica se um processo é um processo x86 em execução no sistema operacional x64; portanto, ele retornará "false" para um processo x64 no sistema operacional x64 ou processo x86 em execução no sistema operacional x86.
Além disso, ele não trata os erros corretamente.
Aqui está um método mais correto:
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);
}