2014-09-03 34 views
1

我用下面殺本地進程:殺本地進程

Sub KillProcess(ByVal ProcessName As String) 
     Dim pProcess() As Process = System.Diagnostics.Process.GetProcessesByName(ProcessName) 
     pProcess(0).Kill() 
    End Sub 

我所說的上面與下面:

Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click 
     KillProcess("acsAPP") 
     KillProcess("acsSRV") 
     KillProcess("ACSTrans") 
     KillProcess("acsCNTRL") 
     KillProcess("acsRep") 
    End Sub 

顯然,以上只是殺死父進程,而不是整個樹(多個進程以相同名稱運行)。我怎樣才能殺死所有列出的同名進程?必須有一個力量開關或類似的東西。

謝謝!

+0

GetProcessesByName返回不止一個,但你只刪除第一個。循環所有結果並殺死每個似乎最簡單的東西。 – Jay 2014-09-03 12:51:07

回答

3

正如您在KillProcess()中看到的那樣,您只會殺死1個進程,而GetProcessesByName()正在返回進程列表。嘗試用下面的方法替換你的方法,循環遍歷所有進程並全部殺死它們;

Private Sub KillProcess(ByVal ProcessName As String) 

    Dim pProcess() As Process = System.Diagnostics.Process.GetProcessesByName(ProcessName) 

    For Each p As Process In pProcess 
     p.Kill() 
    Next 
End Sub 
+0

謝謝!這工作。 – 2014-09-03 13:20:52

2

如果你看一下在GetProcessByName的文檔,你會看到它返回的匹配名稱進程的陣列(有作爲的方式進程樹沒有這樣的事情,因爲沒有進程層次) 。

你只是在殺死陣列中的第一個:pProcess(0)。注意(0)是數組中的第一個元素,因爲它基於零。

要解決這個問題,你需要殺死所有匹配的進程:

Sub KillProcess(ByVal ProcessName As String) 
    For Each proc As Process In System.Diagnostics.Process.GetProcessesByName(ProcessName) 
     proc.Kill() 
    Next 
End Sub