Я использую этот простой код для перечисления всех запущенных процессов и их архитектуры (32bit
или 64bit
) на консоли, и он работает почти точно, но число процессов в результате - даже не половина того, что я вижу в WindowsTaskManager или ProcessHacker .Большинство моих запущенных процессов не включены в возвращаемый результат.И это почти возвращает только системные процессы.Иногда я получаю «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