65.9K
CodeProject 正在变化。 阅读更多。
Home

从 Visual Basic 应用程序终止进程

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (5投票s)

2008年6月9日

CPOL

3分钟阅读

viewsIcon

102621

downloadIcon

4060

本文提供了一个简单的例子,说明如何使用 System.Diagnostics.Process 库来显示正在运行的进程列表,并根据进程名称和 ID 选择和终止进程。

引言

本文提供了一个简单的例子,说明如何使用 System.Diagnostics.Process 库来显示正在运行的进程列表,并根据进程名称和 ID 选择和终止进程。 使用相同的库显示有关进程的附加信息或仅根据其 ID 或名称而不是其名称和 ID 终止进程并不是一个大问题,但在本例中,进程名称和 ID 用于显示目的和终止正在运行的进程的目的。

image001.png
图 1:按进程名称和 ID 列出和终止进程

入门

此下载包含一个解决方案,该解决方案包含一个名为“ProcessKillerVB”的 Win Forms 项目; 该项目包含一个表单 (Form1.vb),显示和终止进程所需的所有代码都包含在该单个表单类中。 如果您将附加项目打开到 Visual Studio 2008 中; 您应该在解决方案资源管理器中看到以下内容

image002.png
图 2:解决方案资源管理器

代码:主窗体

主窗体包含显示和更新用户机器上当前正在运行的进程列表所需的所有用户界面元素。 它还包含一个按钮处理程序,该处理程序将按进程名称终止进程。 您也可以按其 ID 终止进程,但就可读性而言,如果用户正在选择进程,进程名称对他们来说比进程 ID 更有意义。

该类以正常的和默认的导入开始

Imports System.Diagnostics

构造函数调用一个名为“UpdateProcessList”的方法,该方法用于获取和显示正在运行的进程列表; 它将很快被描述。

Public Class Form1


    Public Sub New()

        ' This call is required by the Windows Form Designer.
        InitializeComponent()

        ' display the list of running processes
        UpdateProcessList()

    End Sub

下一段代码是 UpdateProcessList 函数; 此函数清除列表框中的所有现有条目,然后循环遍历每个当前进程,将每个进程的名称和 ID 添加到列表中(作为进程名称 - ID)。 在该函数的末尾,将更新状态消息以显示找到的当前进程数。

    ''' <summary>
    ''' Loop through the list of running processes
    ''' and add each process name to the process
    ''' listbox
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub UpdateProcessList()

        ' clear the existing list of any items
        lstProcesses.Items.Clear()

        ' loop through the running processes and add
        'each to the list
        Dim p As System.Diagnostics.Process

        For Each p In System.Diagnostics.Process.GetProcesses()
            lstProcesses.Items.Add(p.ProcessName & " - " & p.Id.ToString())
        Next

        lstProcesses.Sorted = True

        ' display the number of running processes in
        ' a status message at the bottom of the page
        tslProcessCount.Text = "Processes running: " & _
        lstProcesses.Items.Count.ToString()

    End Sub

应用程序中的下一段代码是更新按钮的单击事件处理程序; 它所做的只是调用 UpdateProcessList 函数以更新列表框的内容。

    ''' <summary>
    ''' Manually update the list of runnings
    ''' processes
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btnUpdateProcessList_Click(ByVal sender As System.Object, _
                                           ByVal e As System.EventArgs) _
                                           Handles btnUpdateProcessList.Click
        UpdateProcessList()

    End Sub

应用程序中的最后一段代码用于终止正在运行的进程。 由于您可以拥有多个具有相同名称的进程,因此有必要将 ID 与名称一起添加,以便区分单个应用程序的多个实例,否则,我们将最终终止该应用程序的所有正在运行的实例,这可能是也可能不是可取的,具体取决于您正在做什么。 如果您确实要终止应用程序的所有正在运行的实例,请忽略 ID 并终止所有具有相同进程名称的正在运行的进程。

在终止按钮单击事件处理程序中; 我们再次循环遍历所有正在运行的进程,并从进程/ID 列表中选择选定的项目,并将其解析为包含进程名称的字符串和包含 ID 的整数值。 如果当前进程(在循环中)同时匹配进程名称和进程 ID,则终止该进程。 最后,处理程序调用用于重新填充列表框的更新方法,以便它显示当前活动进程列表及其 ID。

    ''' <summary>
    ''' Kill the process selected in the process name
    ''' and ID listbox
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btnKill_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) _
                              Handles btnKill.Click

        If lstProcesses.SelectedItems.Count <= 0 Then
            MessageBox.Show("Click on a process name to select it.", "No Process 
            Selected")
            Return
        End If

        ' loop through the running processes looking for a match
        ' by comparing process name to the name selected in the listbox
        Dim p As System.Diagnostics.Process

        For Each p In System.Diagnostics.Process.GetProcesses()

            Dim arr() As String = _
            lstProcesses.SelectedItem.ToString().Split("-")

            Dim sProcess As String = arr(0).Trim()
            Dim iId As Integer = Convert.ToInt32(arr(1).Trim())

            If p.ProcessName = sProcess And p.Id = iId Then
                p.Kill()
            End If

        Next

        ' update the list to show the killed process
        ' has been removed
        UpdateProcessList()

    End Sub


End Class

这总结了本例中使用的所有代码的描述。

摘要

本文展示了一种可能用于显示当前进程列表,并根据进程名称及其 ID 选出一个进程并终止它的方法。 也可以通过终止所有与名称匹配的进程而不考虑进程 ID 来终止特定进程的所有实例。 所示方法允许选出特定进程的实例并终止它,而不会关闭所有其他匹配的进程。

© . All rights reserved.