c# - Process.GetProcesses 和 IsWow64Process 不会返回所有正在运行的进程
问题描述
我使用这个简单的代码在控制台上列出所有正在运行的进程及其体系结构(32bit
或),它的工作原理几乎准确,但结果中的进程数甚至不是我在WindowsTaskManager或ProcessHacker64bit
中看到的一半。我的大部分运行进程都不包含在返回结果中。它几乎只返回系统进程。有时我得到“ ”或“拒绝访问”(可能是因为某些进程受到保护),有时没有例外:Win32Exception
internal static class Program
{
private static void Main()
{
foreach (var p in Process.GetProcesses())
{
try
{
if (p.IsWin64Emulator())
{
Console.WriteLine(p.ProcessName + " x86 " + p.MainModule.FileName);
}
else
{
Console.WriteLine(p.ProcessName + " x64 " + p.MainModule.FileName);
}
}
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)
{
return NativeMethods.IsWow64Process(process.Handle, out var retVal) && retVal;
}
return false;
}
}
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);
}
所以这是我的问题:为什么这段代码没有显示结果中的所有过程?以及如何解决这个问题?
包含的示例:
conhost x64
OpenWith x64
LockApp x64
ShellExperienceHost x64
SearchUI x64
...
不包括的示例:
CSh_Test x64 --> Current Running Sotfware in debug mode
explorer x64
ccSvcHst x86 --> Symantec AV
devenv x86 --> Visual Studio
XYplorer x86 --> File manager
解决方案
GetProcesses() 为您提供正在运行的进程,但不提供也在 WindowsTaskManager 中显示的底层服务。也许这就是你正在经历的差异?
如果没有,请提供更多关于显示什么和不显示什么的信息。
推荐阅读
- git - Github 中的 Node_Modules
- c++ - copy_file 什么时候真正返回 false?
- azure - 使用 Azure 数据工厂 v2 的 ETL
- firebase - 基于集合的firestore查询过滤器
- google-sheets - 如何使用自定义标准对谷歌工作表中的项目进行排序
- iis - 配置 IIS 以启用目录浏览,无需 Kestrel 劫持路由
- testing - chai-http 将两个不同的同名字段视为一个字段
- webpack - 如何使 SASS 可用于 NextJS 中的自定义 Webpack 实现?
- ios - 如何使 Dropbox 的下载任务无效
- ios - 在 CCAvenue iOS 中解密应用程序请求的问题