2009-07-28 4 views
10

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

Process[] myProcesses = Process.GetProcesses(); 

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

ответ

11

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

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

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

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

1

Это единственный способ, которым я мог это сделать. Я попробовал 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(); 
     } 
    } 
} 
10

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

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

Там вы идете!

Смежные вопросы