Получение информации о описании процесса

Я пытаюсь получить информацию о процессе, и я знаю, что могу использовать:

Process[] myProcesses = Process.GetProcesses();

но как получить описание процесса? Это через какой-то вызов Win32 API? Я запускаю Vista, и когда я нажимаю на вкладке "Процессы" в "Диспетчере задач", я вижу описание.

Ответ 1

То, что вы видите в Диспетчере задач, фактически является полем описания исполняемого образа.

Вы можете использовать вызовы GetFileVersionInfo() и VerQueryValue() WinAPI для доступа к различной информации о версии, например. CompanyName или FileDescription.

Для .Net-пути используйте член FileDescription FileVersionInfo, созданный с помощью исполняемого имени, полученного через Process.MainModule.FileName.

Другой способ - через Assembly. Загрузите сборку из исполняемого изображения, затем запросите пользовательский атрибут AssemblyDescriptionAttribute.

Ответ 2

Вам просто нужно пойти немного дальше по свойствам. Предположим, что у вас есть экземпляр блокнота.

Process[] proc = Process.GetProcessesByName("notepad");
Console.WriteLine("Process version- " + proc[0].MainModule.FileVersionInfo.FileVersion);
Console.WriteLine("Process description- " + proc[0].MainModule.FileVersionInfo.FileDescription);

Там вы идете!

Ответ 3

Это единственный способ, которым я мог это сделать. Я попробовал Process и Win32_Process, но не пошел.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
using System.Diagnostics;

namespace Management
{
    class Program
    {
        static void Main(string[] args)
        {
            var ps = Process.GetProcesses();

            foreach (var p in ps)
            {
                try
                {
                    var desc = FileVersionInfo.GetVersionInfo(p.MainModule.FileName);
                    Console.WriteLine(desc.FileDescription);
                }
                catch
                {
                    Console.WriteLine("Access Denied");
                }
            }

            Console.ReadLine();
        }
    }
}

Ответ 4

  public static string findProcDesc(int Pid)
        {
            //try
            //{
                Process proc = Process.GetProcessById(Pid);
                String process_description = proc.MainModule.FileVersionInfo.FileDescription;
                return process_description;
            //} catch() {

            //}

        }

Уловка будет возвращать "Доступ запрещен". Как мы могли это сделать, не дав разрешения на это?