如何确定System.Diagnostics.Process是32位还是64位?

时间:2010-08-26 13:55:45

标签: .net windows process 64-bit system.diagnostics

我试过了:

process.MainModule.FileName.Contains("x86")

但它引发了x64进程的异常:

  

Win32Exception:只有部分ReadProcessMemory ou WriteProcessMemory请求完成

3 个答案:

答案 0 :(得分:8)

您需要通过P / Invoke调用IsWow64Process

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

这是一个让它更容易调用的助手:

public static bool Is64BitProcess( this Process process )
{
    if ( !Environment.Is64BitOperatingSystem )
        return false;

    bool isWow64Process;
    if ( !IsWow64Process( process.Handle, out isWow64Process ) )
        throw new Win32Exception( Marshal.GetLastWin32Error() );

    return !isWow64Process;
}

答案 1 :(得分:1)

WMI的Win32_ProcessSystem.Diagnostics.Process都不提供任何明确的属性。

如何迭代加载的模块(Process.Modules),32位进程将加载%WinDir%\syswow64\kernel32.dll,而64位进程将从%WinDir%\system32\kernel32.dll加载它(这是一个dll, 每个 Windows进程加载。)

NB。当然,此测试将在x86 OS实例上失败。

答案 2 :(得分:0)

Environment.Is64BitProcess可能就是你要找的东西。