Есть много проблем, связанных с этим, так как другие, кажется, частично решают:
- Любые члены экземпляра не гарантируют поточно-ориентированность. Это означает, что существуют условия гонки, которые могут возникать со временем жизни снимка при попытке оценить свойства объекта.
- Дескриптор процесса вызовет исключение Win32Exception для ACCESS DENIED, если разрешения для оценки этого и других подобных свойств не разрешены.
- Для статуса ISN'T RUNNING, ArgumentException также будет вызываться при попытке оценить некоторые из его свойств.
Независимо от того, какие свойства были упомянуты другими, являются внутренними или нет, вы все равно можете получить от них информацию, если разрешите.
var x = obj.GetType().GetProperty("Name", BindingFlags.NonPublic | BindingFlags.Instance);
Вы можете вводить код Win32 для Снимок или использовать WMI , что медленнее.
HANDLE CreateToolhelp32Snapshot(
DWORD dwFlags,
DWORD th32ProcessID
);
Другой вариант: OpenProcess / CloseProcess, но вы все равно столкнетесь с теми же проблемами, за исключением тех же исключений, что и раньше.
Для WMI - OnNewEvent.Properties ["?"]:
- "ParentProcessID"
- "ProcessID"
- "ProcessName"
- "SECURITY_DESCRIPTOR"
- "SessionID"
- "Sid"
- "time_created"