チュートリアル : Windows プロセスの管理

更新 : 2007 年 11 月

このトピックでは、プロセスの作成、プロセスが停止したときの応答、およびプロセスの停止に関する手順について説明します。最初のセクションでは、メモ帳のプロセスを開始および停止する Button コントロールを持つ Windows アプリケーションを作成します。メモ帳の複数のインスタンスを個別に起動した後で、それらをまとめて停止します。2 番目のセクションでは、コンピュータ上で動作中のプロセスを列挙するコンソール アプリケーションを作成します。

Process コンポーネントを使用してシステム プロセスとやり取りする方法の詳細については、「Windows プロセスの監視と管理の概要」を参照してください。

s9tkk4a3.alert_note(ja-jp,VS.90).gifメモ :

使用している設定またはエディションによっては、表示されるダイアログ ボックスやメニュー コマンドがヘルプに記載されている内容と異なる場合があります。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。

アプリケーションを作成するには

  1. [新しいプロジェクト] ダイアログ ボックスで、Visual Basic、Visual C#、または Visual J# の Windows アプリケーションを作成します。

  2. Form1 デザイナが開いた状態で、ツールボックス の [Windows フォーム] タブをクリックし、フォームに 2 つのボタンを追加します。

  3. [プロパティ] ウィンドウで、次のプロパティを変更します。

    コントロール

    プロパティ

    Button1

    Name

    ButtonStart

     

    Text

    Start Process

    Button2

    Name

    ButtonStop

     

    Text

    Stop Process

  4. ツールボックス の [コンポーネント] タブをクリックし、Process コンポーネントのインスタンスをデザイン画面にドラッグします。

  5. コンポーネントに myProcess という名前を付けます。

Notepad.exe プロセスを開始するには

  1. Process コンポーネントのインスタンスの [プロパティ] ウィンドウで、StartInfo プロパティを展開し、FileName プロパティを notepad.exe に設定します。

  2. [Start Process] をダブルクリックしてコード エディタにアクセスし、ButtonStart_Click() イベントに次のコードを追加します。

    myProcess.Start
    
    myProcess.Start();
    
  3. すべてのファイルを保存し、アプリケーションをビルドして実行します。

  4. [Start Process] を数回クリックします。クリックするたびに、メモ帳の異なるインスタンスが表示されます。

    s9tkk4a3.alert_security(ja-jp,VS.90).gifセキュリティに関するメモ :

    完全には信頼できないコンテキストでプロセスを実行している場合は、権限不足のために SecurityException 例外がスローされることがあります。詳細については、「コード アクセス セキュリティの基礎」を参照してください。

  5. 個別のメモ帳アプリケーションを閉じます。

  6. Form1 アプリケーションを閉じます。

Notepad.exe プロセスの現在のインスタンスをすべて閉じるには

  1. Form1 のコード エディタを開きます。

  2. [デザイン] ビューで、[Stop Process] ボタンをダブルクリックして 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. [Start Process] をクリックして、メモ帳のインスタンスをいくつか起動します。

  6. [Stop Process] をクリックすると、実行されているメモ帳のすべてのインスタンスがすぐに閉じます。

  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. [Start Processes] をクリックして、メモ帳のインスタンスをいくつか起動します。

  5. 前と同じように、[Stop Processes] をクリックしてプロセスを閉じます。

    アプリケーションは、各プロセスが停止するまで 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(ja-jp,VS.90).gifメモ :

    GetProcesses または GetProcessesByName を呼び出したときに、返されたプロセスの 1 つが次の呼び出しの前に終了すると、これらのプロシージャで例外が発生する場合があります。その場合は、プロセスが存在しないという例外が通知されます。

参照

処理手順

方法 : プロセスを指定する

方法 : プロセスを停止する

その他の技術情報

プロセスの管理