Обходной путь для ошибки в моно: неправильный Process.ProcessName(разрешенный)

Если вы работаете с моно и используете Process.ProcessName, вы можете получить неправильные результаты на некоторых компьютерах.

Например, вместо имени процесса "kwrite" вы можете получить "kdeinit4" (см. SUSE).

На Ubuntu я даже видел полную ерунду вроде "kdeinit4;5535948c (deleted)" вместо "kwrite".

Примечание. На других компьютерах результат может быть правильным.

Если я использую Process.MainModule.ModuleName, он извлекает одно и то же неправильное имя. И если я использую Process.MainModule.FileName, это дает неправильный путь. Кроме того, эти команды Чрезвычайно медленны.

Итак, все, что я пробовал, полно ошибок. Что я могу сделать?

Ответ 1

Обходной путь можно выполнить с помощью двух строк:

String sProcFile = String.Format("/proc/{0}/comm", proc.Id);
String sProcName = File.ReadAllText(sProcFile).Trim();

Он работает как шарм на всех компьютерах, где ProcessName не работает.