Как может моя проверка приложения C#, ли конкретное приложение/процесс (отметьте: не текущий процесс), работает в 32-разрядном или 64-разрядном режиме?
Например, я мог бы хотеть запросить конкретный процесс по имени, т.е., 'abc.exe', или на основе Идентификационного номера процесса.
Один из наиболее интересных способов, который я увидел:
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);
}
}
Вы можете проверить размер указателя, чтобы определить, 32 или 64 бита.
int bits = IntPtr.Size * 8;
Console.WriteLine( "{0}-bit", bits );
Console.ReadLine();
Если вы используете .Net 4.0, это однострочный процесс для текущего процесса:
Environment.Is64BitProcess
См. Environment.Is64BitProcessProperty (MSDN).