为啥 GetProcesses() 不显示所有正在运行的进程

Posted

技术标签:

【中文标题】为啥 GetProcesses() 不显示所有正在运行的进程【英文标题】:Why GetProcesses() doesn't show all of running processes为什么 GetProcesses() 不显示所有正在运行的进程 【发布时间】:2019-10-26 17:07:49 【问题描述】:

当我运行以下代码时,我希望获得系统中运行的所有进程的名称,但在我以外的其他一些 PC 中,有一个正在运行的进程在 TaskManager 中可见,但我的应用程序没有显示它,我想知道我是否做错了什么或者有什么办法可以解决这个问题,顺便说一句,我的应用程序是以管理员身份运行的,所以这不是问题。感谢您的帮助。

foreach(Process Proc in Process.GetProcesses()) 
    T += Proc.ProcessName + ", ";

【问题讨论】:

你知道那些没有被GetProcesses()列出的进程的名字吗? 您可以比较Win32_Process和Win32_Service(或ServiceController.GetServices)返回的列表或进程,看看您认为缺少的是否在其中。 【参考方案1】:

可以在服务主机进程 (svchost.exe) 的同一实例中加载多个操作系统服务。 GetProcesses 不识别那些单独的服务;为此,请使用GetServices。请务必阅读official docs。

【讨论】:

【参考方案2】:

Process.GetProcesses() 不返回系统进程。服务也可能显示为 svhost.exe。

【讨论】:

以上是关于为啥 GetProcesses() 不显示所有正在运行的进程的主要内容,如果未能解决你的问题,请参考以下文章

Process.GetProcesses() 占用过多的 CPU 利用率

为啥张量板不显示所有指标?

为啥 JOptionPane 中的 JScrollPane 不显示其所有内容?

通过指定/模拟另一个帐户来调用 Process.GetProcesses?

获取计算机上的所有进程

.Net GetProcesses 的访问被拒绝