我的C#应用程序如何检查特定的应用程序/进程(注意:不是当前进程)是否以32位或64位模式运行?
例如,我可能想通过名称(即“ abc.exe”)或基于进程ID号来查询特定进程。
我见过的一种更有趣的方式是:
if (IntPtr.Size == 4) { // 32-bit } else if (IntPtr.Size == 8) { // 64-bit } else { // The future is now! }
要了解其他进程是否正在64位仿真器(WOW64)中运行,请使用以下代码:
namespace Is64Bit { using System; using System.ComponentModel; using System.Diagnostics; using System.Runtime.InteropServices; internal static class Program { private static void Main() { foreach (var p in Process.GetProcesses()) { try { Console.WriteLine(p.ProcessName + " is " + (p.IsWin64Emulator() ? string.Empty : "not ") + "32-bit"); } catch (Win32Exception ex) { if (ex.NativeErrorCode != 0x00000005) { throw; } } } Console.ReadLine(); } private static bool IsWin64Emulator(this Process process) { if ((Environment.OSVersion.Version.Major > 5) || ((Environment.OSVersion.Version.Major == 5) && (Environment.OSVersion.Version.Minor >= 1))) { bool retVal; return NativeMethods.IsWow64Process(process.Handle, out retVal) && retVal; } return false; // not on 64-bit Windows Emulator } } internal static class NativeMethods { [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool IsWow64Process([In] IntPtr process, [Out] out bool wow64Process); } }