Создание процессов и управление ими

№11-1,

Технические науки

В статье рассмотрена проблема создания процессов и управление ими.

Похожие материалы

Запуск командного процессора

Для запуска 32-разрядного командного процессора операционной системы создаём процесс с идентификатором ту, в свойстве FileName указываем полный адрес командного процессора и запускаем процесс:

using System;
using System.Diagnostics;
class MyProcess
{
public static void Main()
{
Process my = new Process();
my.StartInfo.FileName = "C:\\WINDOWS.0\\system32\\cmd.exe"
my.Start();
Console.Read(); }
}

В результате появляется окно командного процессора:

Ресурсы процесса и передача параметров запускаемому процессу

 В операционной системе Windows запустить процесс можно двумя способами:

  1. Запустить обрабатывающую программу и с помощью параметров передать этой программе имя обрабатываемого документа;
  2. Дважды щёлкнуть по файлу, содержащему обрабатываемый документ. Операционная система по расширению файла определит, какая программа обрабатывает документ такого типа, вызовет на исполнение эту программу и передаст ей обрабатываемый документ.

Вызов программы: указанием ресурса.

С#-программа processstartinfo2.exe используется для запуска файла, содержащего исходный код программы. Запуск процесса производится указанием имени запускаемого ресурса. Поскольку имя программы для обработки данного ресурса не указывается, необходимо разрешить операционной системе использовать свои возможности. Для этого свойство Startlnfo.UseShellExecute получает значение true:

using System;
using System.Diagnostics;
class MyProcess
{
public static void Main()
{
Process myProcess = new Process();
try
{
myProcess.StartInfo.UseShellExecute = true; myProcess.Startlnfo.FileName = "C:\\v\\processstartinfo2.doc";
myProcess.Start() ;
}
catch   (Exception e) {
Console.WriteLine(e.Message) ;
}
}
}

Все необходимые файлы находятся в папке v. Протокол запуска программы:

С:\v>processstartinfо2 
С: \v> 

На экране появляется окно Word, содержащее исходный код программы processstartinfo2.es: 

Фрагмент окна папки v:

В данном случае C#-программа была запущена двойным щелчком по ресурсу (другими словами - по документу, который должен быть открыт).

Перехват результатов работы процесса

Процесс создаётся для того, чтобы выполнить какую-то часть работы, а затем использовать полученный результат. С этой целью выполним программу 7.cs:

 //Программа 7.cs
using System;
using System.Diagnostics;
class MainClass {
public static void Main() {
Process p = new Process(); p.StartInfo.FileName =  "cmd.exe"; p.StartInfo.Arguments = "/c dir *.cs";
p.StartInfo.UseShellExecute =  false; p.StartInfo.RedirectStandardOutput = true;
p.Start();
string output = p.StandardOutput.ReadToEnd();
Console.WriteLine("Output:"); Console.WriteLine(output); }
}

В этой программе с помощью 32-разрядного процессора cmd.exe запрашивается, какие исходные тексты программ, написанных на языке c# содержатся в текущем директории. Имеется в виду директорий v: в корне диска С:.

В свойстве Startlnfo.Arguments содержится комбинация символов /c, обозначающая необходимость выполнения команды операционной системы - далее указывается, что такой командой должна быть команда dir. Результат выполнения этой команды разрешено перенаправить в стандартный выходной поток.

Последние три команды посвящены работе с этим потоком. Сначала стандартный выходной поток направляется в переменную output. Затем выводится на печать заголовок, предупреждающий, что будет выводиться содержимое стандартного выходного потока, т. е. результат работы команды dir операционной системы. И затем распечатывается содержание переменной output, т. е. список имеющихся в каталоге у исходных текстов сопрограмм.