Date: 16.01.2020 3:46:38
>Но как извлечь у процесса w3wp.exe имя пользователя имея только возможности ASP.NET Core 3.0 не могу найти варианта. "
Никак, ASP.NET Core ничего не знает о пользователях Windows. Да и что это даст? Скорее всего, там будет безликая учетная запись
службы, типа NETWORK SERVICE. Кроме того, если процесс IIS запускается не под текущим пользователем и у вашего процесса ограниченные привилегии, вы вообще не должны его видеть, разве нет? А нет, они будут видны при перечислении
процессов, но никакого доступа к ним не будет.
Зачем вам нужно знать потребление памяти процессом, в котором не запускается только небольшой модуль, перенаправляющий запросы в ASP.NET Core? Из любопытства, или у вас приложение страдает от нехватки памяти?
Date: 16.01.2020 5:12:11
Попробуйте этот метод натравить на все процессы:
using System; using System.Runtime.InteropServices; using System.Diagnostics; namespace NetCoreTest { class Program { [DllImport("kernel32.dll", SetLastError = true)] public static extern IntPtr OpenProcess( uint processAccess, bool bInheritHandle, int processId ); [DllImport("kernel32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] static extern bool CloseHandle(IntPtr hObject); static uint PROCESS_QUERY_INFORMATION = 0x0400; public static bool TryOpenProcess(Process proc) { IntPtr handle = OpenProcess(PROCESS_QUERY_INFORMATION, false, proc.Id); if (handle != IntPtr.Zero) { CloseHandle(handle); return true; } else return false; } } }
Он должен, при запуске с обычными правами, вернуть true для всех процессов, запущенных от текущего пользователя, и false для системных процессов и процессов других пользователей.
Автор: VadimTagil