You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中通过进程ID利用ManagementObject查找64位进程

在C#中用ManagementObject获取64位进程的解决方案

首先要明确:Win32_Process WMI类本身是支持查询64位进程的,问题通常出在32位程序在64位系统上运行时的默认WMI架构限制上。下面分场景给你具体的实现方案:


1. 64位程序直接查询(无需额外配置)

如果你的C#项目是按x64架构编译(或者AnyCPU模式下关闭了「Prefer 32-bit」选项),在64位Windows系统上运行时,直接用你原来的查询语句就能获取包括64位在内的所有进程:

int parentPid = // 你的父进程ID
using (var searcher = new ManagementObjectSearcher($"select ProcessId from Win32_Process where ParentProcessId={parentPid}"))
{
    foreach (ManagementBaseObject m in searcher.Get())
    {
        int childPid = Convert.ToInt32(m["ProcessId"]);
        // 这里拿到的childPid可能是32位或64位进程,取决于实际运行的进程
    }
}

2. 32位程序查询64位进程(需要配置WMI架构)

如果你的程序是32位编译的,在64位系统上默认只能看到32位进程。要获取64位进程,需要在ManagementScope中指定查询架构为64位:

int parentPid = // 你的父进程ID
// 创建WMI范围并配置64位架构
var scope = new ManagementScope(@"\\.\root\cimv2");
scope.Options = new ConnectionOptions();
// 关键配置:强制使用64位WMI提供程序
scope.Options.Context.Add("__ProviderArchitecture", 64);
scope.Options.Context.Add("__RequiredArchitecture", true);
scope.Connect();

// 执行查询
var query = new ObjectQuery($"select ProcessId from Win32_Process where ParentProcessId={parentPid}");
using (var searcher = new ManagementObjectSearcher(scope, query))
{
    foreach (ManagementBaseObject m in searcher.Get())
    {
        int childPid = Convert.ToInt32(m["ProcessId"]);
        // 现在可以拿到64位的子进程ID了
    }
}

3. 验证进程是否为64位

如果你需要精准筛选出64位进程,可以查询Win32_Process的AddressWidth属性——该属性返回32表示32位进程,64表示64位进程:

var query = new ObjectQuery($"select ProcessId, AddressWidth from Win32_Process where ParentProcessId={parentPid}");
// (如果是32位程序,记得先配置WMI架构)
using (var searcher = new ManagementObjectSearcher(scope, query))
{
    foreach (ManagementBaseObject m in searcher.Get())
    {
        int pid = Convert.ToInt32(m["ProcessId"]);
        int addressWidth = Convert.ToInt32(m["AddressWidth"]);
        bool is64BitProcess = addressWidth == 64;
        
        if (is64BitProcess)
        {
            Console.WriteLine($"找到64位子进程ID:{pid}");
            // 这里可以添加终止进程的逻辑
        }
    }
}

注意事项

  • 操作进程(尤其是终止进程)需要管理员权限,建议右键以管理员身份运行你的程序。
  • 如果在32位系统上运行,无论程序架构如何,都只能查询到32位进程,因为32位系统不支持64位进程。

内容的提问来源于stack exchange,提问作者we know

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 22:37:32