7

我试过了:

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

但它为 x64 进程抛出了异常:

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

4

3 回答 3

12

您需要通过 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;
}
于 2010-08-26T15:43:18.750 回答
1

Environment.Is64BitProcess可能是您正在寻找的。

于 2010-08-26T15:15:08.930 回答
1

WMIWin32_Process也不System.Diagnostics.Process提供任何明确的属性。

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

注意。当然,此测试在 x86 操作系统实例上会失败。

于 2010-08-26T15:13:31.843 回答