Как определить программно, является ли конкретный процесс 32-разрядным или 64-разрядным

Как может моя проверка приложения C#, ли конкретное приложение/процесс (отметьте: не текущий процесс), работает в 32-разрядном или 64-разрядном режиме?

Например, я мог бы хотеть запросить конкретный процесс по имени, т.е., 'abc.exe', или на основе Идентификационного номера процесса.

96
задан Harry Johnston 19 October 2015 в 03:05
поделиться

3 ответа

Один из наиболее интересных способов, который я увидел:

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);
    }
}
173
ответ дан 24 November 2019 в 05:31
поделиться

Вы можете проверить размер указателя, чтобы определить, 32 или 64 бита.

int bits = IntPtr.Size * 8;
Console.WriteLine( "{0}-bit", bits );
Console.ReadLine();
10
ответ дан 24 November 2019 в 05:31
поделиться

Если вы используете .Net 4.0, это однострочный процесс для текущего процесса:

Environment.Is64BitProcess

См. Environment.Is64BitProcessProperty (MSDN).

137
ответ дан 24 November 2019 в 05:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: