Взаимодействие с процессами в рамках платформы .NET

Роль процесса Windows

Процессы, домены приложений и контексты объектов.

Понятие "процесса" существовало в операционных системах Windows задолго до появления платформы .NET. Попросту говоря, под процессом понимается выполняющаяся программа. Однако формально процесс — это концепция уровня операционной системы, которая используется для описания набора ресурсов (таких как внешние библиотеки кода и главный поток) и необходимой памяти, используемой выполняющимся приложением. Каждый процесс Windows получает уникальный идентификатор процесса (Process ID — PID) и может независимо загружаться й выгружаться операционной системой (в том числе программно).

Хотя в самих процессах и потоках нет ничего нового, способ, которым с ними можно взаимодействовать в рамках платформы .NET, довольно прилично изменился (в лучшую сторону). Чтобы проложить себе путь к пониманию приемов построения многопоточных сборок (о которых речь пойдет в главе 19), начнем с того, что посмотрим, каким образом можно взаимодействовать с процессами за счет применения библиотек базовых классов .NET.

В пространстве имен System. Diagnostics поставляется набор типов, которые позволяют программно взаимодействовать с процессами и различными связанными с диагностикой средствами вроде системного журнала событий и счетчиков производительности. В настоящей главе нас интересуют только те типы, которые позволяют взаимодействовать с процессами. Некоторые наиболее важные из них перечислим.

Process Предоставляет доступ к локальным и удаленным процессам, а также позволяет запускать и останавливать процессы программным образом

ProcessModule Представляет модуль (* . dll или * . ехе), который должен загружаться в определенный процесс. Важно понимать, что этот тип может применяться для представления любого модуля — COM-, .NET- или традиционного двоичного на базе С

ProcessModuleCollection Позволяет создавать строго типизированную коллекцию объектов ProcessModule Класс System. Diagnostics . Process позволяет анализировать процессы, которые выполняются на какой-то определенной машине (локальной или удаленной). Кроме того, в нем есть члены, которые позволяют программно запускать и останавливать процессы, просматривать приоритет процесса, а также получать список активных потоков 586 Часть IV. Программирование с использованием сборок .NET и/или модулей, которые были загружены в данный процесс. Некоторые важные свойства:

ExitTime     Это свойство позволяет извлекать значение даты и времени, ассоциируемое с процессом, который завершил свою работу (и представленное типом DateTime).
Handle   Это свойство возвращает дескриптор (представляемый с помощью IntPtr), который был назначен процессу операционной системой. Может оказаться полезным при создании приложений .NET, нуждающихся во взаимодействии с неуправляемым кодом.
Id   Это свойство позволяет получать идентификатор (PID) соответствующего процесса.
MachmeName   Это свойство позволяет получать имя компьютера, на котором выполняется соответствующий процесс.
MainWmdowTitle Это свойство позволяет получать заголовок главного окна процесса (если у процесса нет главного окна, возвращается пустая строка).  

 

Помимо перечисленных выше свойств, класс System. Diagnostics . Process имеет несколько полезных методов,

 

CloseMainWindow()   Этот метод позволяет завершать процесс, обладающий пользовательским интерфейсом, за счет отправки в его главное окно сообщения о закрытии.  
GetCurrentProcess() Этот статический метод возвращает новый объект Process, представляющий процесс, который является активным в текущий момент.  

 

Управление запуском процесса с использованием класса ProcessStartlnfо

Метод Start () может принимать тип System. Diagnostics . ProcessStartlnf и предоставлять дополнительные фрагменты информации относительно запуска определенного процесса.