Поделиться через


Пошаговое руководство. Управление процессом Windows

Обновлен: Ноябрь 2007

В представленных в этом разделе процедурах описываются шаги, необходимые для создания процесса, обработки остановки процесса и выполнения остановки процесса. В первой части будет создано приложение Windows с элементами управления Button, предназначенными для запуска и остановки процесса Блокнота. Будет запущено несколько экземпляров Блокнота, которые будут остановлены как группа. Во второй части будет создано консольное приложение, перечисляющее работающие на компьютере процессы.

Дополнительные сведения об использовании компонента Process для взаимодействия с системными процессами см. в разделе Знакомство со способами наблюдения за процессами Windows и управлением этими процессами.

s9tkk4a3.alert_note(ru-ru,VS.90).gifПримечание.

Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих настроек или выпуска. Чтобы изменить параметры, выберите в меню Сервис пункт Импорт и экспорт параметров. Дополнительные сведения см. в разделе Параметры Visual Studio.

Создание приложения

  1. В диалоговом окне Новый проект создайте Приложение Windows на языке Visual Basic, Visual C# или Visual J#.

  2. В открытом конструкторе Form1 выберите вкладку Windows Formsпанели элементов и добавьте в форму две кнопки.

  3. В окне Свойства задайте следующие значения свойств.

    Элемент управления

    Свойство

    Значение

    Button1

    Name

    ButtonStart

     

    Text

    Запустить процесс

    Button2

    Name

    ButtonStop

     

    Text

    Остановить процесс

  4. Откройте вкладку Компонентыпанели элементов и перетащите в область конструктора экземпляр компонента Process.

  5. Назовите компонент myProcess.

Запуск процесса Notepad.exe

  1. В окне Свойства экземпляра компонента Process откройте свойство StartInfo и присвойте свойству FileName значение notepad.exe.

  2. Для вызова редактора кода дважды щелкните кнопку Пуск и добавьте в событие ButtonStart_Click() следующий код:

    myProcess.Start
    
    myProcess.Start();
    
  3. Сохраните все файлы, после чего постройте и запустите приложение.

  4. Нажмите несколько раз кнопку Запустить процесс. По каждому нажатию должен запускаться отдельный экземпляр Блокнота.

    s9tkk4a3.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

    Если процесс выполняется в контексте частично доверительных отношений, то из-за недостаточных привилегий он может сгенерировать исключение SecurityException. Дополнительные сведения см. в разделе Основы управления доступом для кода.

  5. Закройте экземпляры Блокнота.

  6. Закройте приложение Form1.

Закрытие всех работающих экземпляров процесса Notepad.exe

  1. Откройте редактор кода формы Form1.

  2. В Режиме разработки дважды щелкните кнопку Остановить процесс, чтобы открыть процедуру ButtonStop_Click().

  3. Добавьте следующий код, закрывающий все работающие экземпляры Блокнота:

    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();
       }
    }
    
  4. Сохраните все файлы, после чего постройте и запустите приложение.

  5. Запустите несколько экземпляров Блокнота, нажимая кнопку Запустить процесс.

  6. Нажмите кнопку Остановить процесс, чтобы закрыть все работающие экземпляры Блокнота одновременно.

  7. Закройте приложение Form1.

Код следующей процедуры будет ожидать завершения процесса.

Настройка ожидания завершения выполнения процесса Блокнота

  1. Откройте редактор кода формы Form1.

  2. Измените код, добавив строку, которая будет вызывать паузу перед закрытием каждого окна:

    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. Сохраните все файлы, после чего постройте и запустите приложение.

  4. Запустите несколько экземпляров Блокнота, нажимая кнопку Запустить процесс.

  5. Как и раньше, нажмите кнопку Остановить процесс для того, чтобы завершить процессы.

    Теперь перед закрытием очередного экземпляра процесса приложение будет ждать 3 секунды, пока не завершится предыдущий процесс.

  6. Закройте приложение Form1.

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

Перечисление процессов, выполняющихся на компьютере

  1. Создайте новое Консольное приложение.

  2. Откройте редактор кода и добавьте в метод 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);
    }
    
  3. Сохраните все файлы, после чего постройте и запустите приложение.

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

    s9tkk4a3.alert_note(ru-ru,VS.90).gifПримечание.

    В этих двух процедурах могут возникать исключения, если при вызове GetProcesses или GetProcessesByName один из возвращенных процессов завершается до следующего вызова. В этом случае будет создано исключение, указывающее на то, что процесс не существует.

См. также

Задачи

Практическое руководство. Назначение процессов

Практическое руководство. Остановка процессов

Другие ресурсы

Управление процессами