逐步解說:管理 Windows 處理序
更新:2007 年 11 月
這個主題中的程序會逐步帶領您熟悉建立處理序、當處理序停止時要如何回應以及停止處理序所需的步驟。首先,您會建立包含 Button 控制項的 Windows 應用程式,用以啟動和停止記事本處理序。您將個別啟動記事本的幾個執行個體,然後一次將其全部停止。接下來您會建立主控台應用程式 (Console Application) 來列舉在您電腦上執行的處理序。
如需使用 Process 元件與系統處理序進行互動的詳細資訊,請參閱監視和管理 Windows 處理序的簡介。
注意事項: |
---|
根據目前使用的設定與版本,您所看到的對話方塊與功能表命令可能會與 [說明] 中所描述的不同。若要變更設定,請從 [工具] 功能表中選擇 [匯入和匯出設定]。如需詳細資訊,請參閱 Visual Studio 設定。 |
若要建立您的應用程式
在 [新增專案] 對話方塊中,建立 Visual Basic、Visual C# 或 Visual J# [Windows 應用程式]。
在 Form1 設計工具開啟的情況下,按一下 [工具箱] 中的 [Windows Form] 索引標籤,接著將兩個按鈕加入至表單。
在 [屬性] 視窗中變更下列屬性:
控制項
屬性
值
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 應用程式。
在以下程序中,您將凍結程式碼,直到處理序完成。
若要設定元件來等候 Notepad 處理序完成執行
為 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(); } }
儲存所有檔案,接著建置並執行應用程式。
按一下 [啟動處理序] 按鈕,來啟動記事本的幾個執行個體。
像前面一樣按一下 [停止處理序] 按鈕來關閉處理序。
您會注意到,這時的應用程式在關閉下一個處理序的執行個體之前,會先等候三秒鐘來讓每個處理序停止。
關閉 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 會在關閉主控台之前將其暫停五秒鐘。
注意事項: 如果您呼叫 GetProcesses 或 GetProcessesByName,而其中一個傳回的處理序在進行下一個呼叫之前就完成時,則可能會在這兩個程序中收到例外狀況。在這種情況下,您會收到顯示處理序不存在的例外狀況。