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