Это по замыслу;при запросе информации о Process
через, например.GetProcessesByName
UserName
не получается / разрешается.
GetProcessByName
внутренне извлекает свою информацию через код ниже, создавая Process
экземплярыиз полученных ProcesInfo
данных.
public static Process[] GetProcesses(string machineName)
{
bool isRemoteMachine = ProcessManager.IsRemoteMachine(machineName);
ProcessInfo[] processInfos = ProcessManager.GetProcessInfos(machineName);
Process[] processes = new Process[processInfos.Length];
for (int i = 0; i < processInfos.Length; i++) {
ProcessInfo processInfo = processInfos[i];
processes[i] = new Process(machineName, isRemoteMachine, processInfo.processId, processInfo);
}
return processes;
}
A ProcessInfo
экземпляр не содержит никакой информации о пользователе / владельце.
internal class ProcessInfo
{
public ArrayList threadInfoList = new ArrayList();
public int basePriority;
public string processName;
public int processId;
public int handleCount;
public long poolPagedBytes;
public long poolNonpagedBytes;
public long virtualBytes;
public long virtualBytesPeak;
public long workingSetPeak;
public long workingSet;
public long pageFileBytesPeak;
public long pageFileBytes;
public long privateBytes;
public int mainModuleId;
public int sessionId;
}
закрытый конструктор класса Process
принимает это ProcessInfo
.
Поскольку ProcessStartInfo
не было установлено, он создает единицу при извлечении, имея пусто UserName
.
public string UserName {
get {
if( userName == null) {
return string.Empty;
}
else {
return userName;
}
}
set { userName = value; }
}
О коде GetProcessOwner
;это вытекает из ответа на Как определить владельца процесса в C #? вопрос.
Это скорее другая WMI
связанная тема;не получение информации о владельце может иметь отношение к разрешениям, как это предлагается в комментариях.
Для меня "это работает на моей машине" ...
Лучше начать отдельный вопрос для этого.