Чтобы получить имя пользователя, вам нужно получить контекст безопасности процесса из Win32 API.
Вызовите функцию OpenProcessToken () через P / Invoke, используя дескриптор процесса, найденный в классе .Net Process из кода, который вы уже использовали выше. Вы получите структуру, содержащую идентификатор безопасности для владельца процесса. Будьте готовы к таким ошибкам, как «Отказ в доступе», поскольку у вас могут не быть прав доступа для получения этой информации для всех процессов, например, тех, которые не принадлежат вам. Оттуда вы должны преобразовать SID в имя. Есть несколько способов сделать это, но функция LookupAccountSid () (снова через P / Invoke) получит имя пользователя для вас.
В фреймворке 2.0 было добавлено несколько вещей, помогающих работать с дескрипторами безопасности (пространство имен System.Security.AccessControl), однако я не вижу ничего, что помогло бы вам справиться со сложностями P / Invoke. .
См. pinvoke.net для получения информации об использовании Win32 API из C #.