代码之家  ›  专栏  ›  技术社区  ›  Jader Dias

如何确定系统诊断过程是32位还是64位?

  •  5
  • Jader Dias  · 技术社区  · 14 年前

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

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

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

    3 回复  |  直到 14 年前
        1
  •  10
  •   Phil Devaney    14 年前

    你需要打电话 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;
    }
    
        2
  •  1
  •   Richard    14 年前

    两个都不是 Win32_Process System.Diagnostics.Process 提供任何明确的属性。

    遍历加载的模块怎么样( Process.Modules %WinDir%\syswow64\kernel32.dll 而64位进程将从 %WinDir%\system32\kernel32.dll (这是 每一个

    注意。当然,这个测试将在x86操作系统实例上失败。

        3
  •  0
  •   Esteban Araya    14 年前

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