共用方式為


逐步解說:管理 Windows 處理序

更新:2007 年 11 月

這個主題中的程序會逐步帶領您熟悉建立處理序、當處理序停止時要如何回應以及停止處理序所需的步驟。首先,您會建立包含 Button 控制項的 Windows 應用程式,用以啟動和停止記事本處理序。您將個別啟動記事本的幾個執行個體,然後一次將其全部停止。接下來您會建立主控台應用程式 (Console Application) 來列舉在您電腦上執行的處理序。

如需使用 Process 元件與系統處理序進行互動的詳細資訊,請參閱監視和管理 Windows 處理序的簡介

注意事項:

根據目前使用的設定與版本,您所看到的對話方塊與功能表命令可能會與 [說明] 中所描述的不同。若要變更設定,請從 [工具] 功能表中選擇 [匯入和匯出設定]。如需詳細資訊,請參閱 Visual Studio 設定

若要建立您的應用程式

  1. 在 [新增專案] 對話方塊中,建立 Visual Basic、Visual C# 或 Visual J# [Windows 應用程式]。

  2. 在 Form1 設計工具開啟的情況下,按一下 [工具箱] 中的 [Windows Form] 索引標籤,接著將兩個按鈕加入至表單。

  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. 按幾次 [啟動處理序] 按鈕。每按一下您就會看到 [記事本] 的個別執行個體。

    安全性注意事項:

    如果您正在部分信任的內容中執行動作,則會因權限不足而導致處理序擲回 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 應用程式。

在以下程序中,您將凍結程式碼,直到處理序完成。

若要設定元件來等候 Notepad 處理序完成執行

  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. 像前面一樣按一下 [停止處理序] 按鈕來關閉處理序。

    您會注意到,這時的應用程式在關閉下一個處理序的執行個體之前,會先等候三秒鐘來讓每個處理序停止。

  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 會在關閉主控台之前將其暫停五秒鐘。

    注意事項:

    如果您呼叫 GetProcessesGetProcessesByName,而其中一個傳回的處理序在進行下一個呼叫之前就完成時,則可能會在這兩個程序中收到例外狀況。在這種情況下,您會收到顯示處理序不存在的例外狀況。

請參閱

工作

HOW TO:指定處理序

HOW TO:停止處理序

其他資源

管理處理序