Пошаговое руководство. Управление процессом Windows
Обновлен: Ноябрь 2007
В представленных в этом разделе процедурах описываются шаги, необходимые для создания процесса, обработки остановки процесса и выполнения остановки процесса. В первой части будет создано приложение Windows с элементами управления Button, предназначенными для запуска и остановки процесса Блокнота. Будет запущено несколько экземпляров Блокнота, которые будут остановлены как группа. Во второй части будет создано консольное приложение, перечисляющее работающие на компьютере процессы.
Дополнительные сведения об использовании компонента Process для взаимодействия с системными процессами см. в разделе Знакомство со способами наблюдения за процессами Windows и управлением этими процессами.
Примечание. |
---|
Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих настроек или выпуска. Чтобы изменить параметры, выберите в меню Сервис пункт Импорт и экспорт параметров. Дополнительные сведения см. в разделе Параметры Visual Studio. |
Создание приложения
В диалоговом окне Новый проект создайте Приложение Windows на языке Visual Basic, Visual C# или Visual J#.
В открытом конструкторе Form1 выберите вкладку Windows Formsпанели элементов и добавьте в форму две кнопки.
В окне Свойства задайте следующие значения свойств.
Элемент управления
Свойство
Значение
Button1
Name
ButtonStart
Text
Запустить процесс
Button2
Name
ButtonStop
Text
Остановить процесс
Откройте вкладку Компонентыпанели элементов и перетащите в область конструктора экземпляр компонента Process.
Назовите компонент myProcess.
Запуск процесса Notepad.exe
В окне Свойства экземпляра компонента Process откройте свойство StartInfo и присвойте свойству FileName значение notepad.exe.
Для вызова редактора кода дважды щелкните кнопку Пуск и добавьте в событие ButtonStart_Click() следующий код:
myProcess.Start
myProcess.Start();
Сохраните все файлы, после чего постройте и запустите приложение.
Нажмите несколько раз кнопку Запустить процесс. По каждому нажатию должен запускаться отдельный экземпляр Блокнота.
Примечание о безопасности. Если процесс выполняется в контексте частично доверительных отношений, то из-за недостаточных привилегий он может сгенерировать исключение SecurityException. Дополнительные сведения см. в разделе Основы управления доступом для кода.
Закройте экземпляры Блокнота.
Закройте приложение Form1.
Закрытие всех работающих экземпляров процесса Notepad.exe
Откройте редактор кода формы Form1.
В Режиме разработки дважды щелкните кнопку Остановить процесс, чтобы открыть процедуру ButtonStop_Click().
Добавьте следующий код, закрывающий все работающие экземпляры Блокнота:
Private Sub ButtonStop_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles ButtonStop.Click Dim myProcesses() As Process Dim instance As Process myProcesses = Process.GetProcessesByName("Notepad") For Each instance In myProcesses instance.CloseMainWindow() instance.Close() Next End Sub
private void ButtonStop_Click(object sender, System.EventArgs e) { System.Diagnostics.Process[] myProcesses; myProcesses = System.Diagnostics.Process.GetProcessesByName("Notepad"); foreach (System.Diagnostics.Process instance in myProcesses) { instance.CloseMainWindow(); instance.Close(); } }
Сохраните все файлы, после чего постройте и запустите приложение.
Запустите несколько экземпляров Блокнота, нажимая кнопку Запустить процесс.
Нажмите кнопку Остановить процесс, чтобы закрыть все работающие экземпляры Блокнота одновременно.
Закройте приложение Form1.
Код следующей процедуры будет ожидать завершения процесса.
Настройка ожидания завершения выполнения процесса Блокнота
Откройте редактор кода формы Form1.
Измените код, добавив строку, которая будет вызывать паузу перед закрытием каждого окна:
Private Sub ButtonStop_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles ButtonStop.Click Dim myProcesses() As Process Dim instance As Process myProcesses = Process.GetProcessesByName("Notepad") For Each instance In myProcesses instance.CloseMainWindow() instance.WaitForExit(3000) instance.Close() Next End Sub
private void ButtonStop_Click(object sender, System.EventArgs e) { System.Diagnostics.Process[] myProcesses; myProcesses = System.Diagnostics.Process.GetProcessesByName("Notepad"); foreach (System.Diagnostics.Process instance in myProcesses) { instance.CloseMainWindow(); instance.WaitForExit(3000); instance.Close(); } }
Сохраните все файлы, после чего постройте и запустите приложение.
Запустите несколько экземпляров Блокнота, нажимая кнопку Запустить процесс.
Как и раньше, нажмите кнопку Остановить процесс для того, чтобы завершить процессы.
Теперь перед закрытием очередного экземпляра процесса приложение будет ждать 3 секунды, пока не завершится предыдущий процесс.
Закройте приложение Form1.
В этой части раздела пошагового руководства будет создано новое консольное приложение, получающее и отображающее список процессов на локальном компьютере.
Перечисление процессов, выполняющихся на компьютере
Создайте новое Консольное приложение.
Откройте редактор кода и добавьте в метод Main перечисление работающих на компьютере процессов:
Sub Main() Dim processes() As Process Dim instance As Process processes = Process.GetProcesses For Each instance In processes Console.WriteLine(instance.ProcessName) Next System.Threading.Thread.Sleep(5000) End Sub
static void Main() { System.Diagnostics.Process[] processes; processes = System.Diagnostics.Process.GetProcesses(); foreach (System.Diagnostics.Process instance in processes) { Console.WriteLine(instance.ProcessName); } System.Threading.Thread.Sleep(5000); }
Сохраните все файлы, после чего постройте и запустите приложение.
В приложении будет открыто консольное окно, содержащее список всех процессов, запущенных сейчас на компьютере. Вызов метода Sleep приостанавливает консольное приложение на 5 секунд перед тем, как его закрыть.
Примечание. В этих двух процедурах могут возникать исключения, если при вызове GetProcesses или GetProcessesByName один из возвращенных процессов завершается до следующего вызова. В этом случае будет создано исключение, указывающее на то, что процесс не существует.
См. также
Задачи
Практическое руководство. Назначение процессов
Практическое руководство. Остановка процессов