Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Статья CodeProject, Как Получить Владельца Процесса идентификатор и Текущий пользователь SID Warlib, описывает, как сделать это использование и WMI и использование API Win32 через PInvoke.
код WMI намного более прост, но медленнее для выполнения. Ваш вопрос не указывает, который более подходил бы для Вашего сценария.
Спасибо, Ваши ответы помещают меня на надлежащий путь. Для тех, кому нужен пример кода:
public class App
{
public static void Main(string[] Args)
{
Management.ManagementObjectSearcher Processes = new Management.ManagementObjectSearcher("SELECT * FROM Win32_Process");
foreach (Management.ManagementObject Process in Processes.Get()) {
if (Process["ExecutablePath"] != null) {
string ExecutablePath = Process["ExecutablePath"].ToString();
string[] OwnerInfo = new string[2];
Process.InvokeMethod("GetOwner", (object[]) OwnerInfo);
Console.WriteLine(string.Format("{0}: {1}", IO.Path.GetFileName(ExecutablePath), OwnerInfo[0]));
}
}
Console.ReadLine();
}
}
Вы могли бы посмотреть на использование Системы. Управление (WMI). С этим можно запросить дерево Win32_Process.
вот , ссылка мс маркировала "GetOwner Method of the Win32_Process Class"