gpt4 book ai didi

c# - 如何以编程方式确定特定进程是 32 位还是 64 位

转载 作者:IT王子 更新时间:2023-10-29 03:36:40 24 4
gpt4 key购买 nike

我的 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);
}
}

关于c# - 如何以编程方式确定特定进程是 32 位还是 64 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1953377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com