杀死我只有部分进程名称的进程

时间:2013-08-19 12:31:45

标签: .net vb.net

我必须杀死一个没有独特名称的进程(exe文件)。我所知道的只是它的名字的前两个字符,例如“3D”。

如何查找进程名称并将其终止。

这是我的代码,我检查进程是否正在运行,然后是什么?我尝试使用通配符,但它不起作用。

选项1:

'-- get a collection of processes running
Dim nameProcess() As System.Diagnostics.Process = System.Diagnostics.Process.GetProcesses
For Each p As Process In Process.GetProcesses()
    Debug.WriteLine(p.ProcessName)
    Next
    ' this is the process check function
    threeD = 3D 'I have declared this as string before in the code
    If IsProcessRunning(threeD) = True Then
        MsgBox("3D Found")
    End If

选项2:

    Dim proc() As Process = Process.GetProcessesByName("3D*")
    For Each temp As Process In proc
    temp.Kill()
    Next

3 个答案:

答案 0 :(得分:2)

我设法提出了一个有效的解决方案,现在是:

    Dim nameProcess() As System.Diagnostics.Process = System.Diagnostics.Process.GetProcesses
    For i = 0 To nameProcess.Length - 1
        If nameProcess(i).ProcessName.StartsWith("3D") Then
            Dim exeName As String = nameProcess(i).ProcessName
            Dim proc() As Process = Process.GetProcessesByName(exeName)
            For Each temp As Process In proc
                temp.Kill()
            Next
        End If
    Next

答案 1 :(得分:1)

您可以使用Process.Kill()停止该过程。

然而,其他一些过程可能会从这些信件开始,所以在采取这样的行动之前,你需要做更多的检查。

此外,您可能希望在Try/Catch中包装访问该进程,因为某些进程(尤其是系统进程)会在您尝试查询它们时抛出AccessDeniedException或更糟。

MSDN - http://msdn.microsoft.com/en-us/library/system.diagnostics.process.kill.aspx

答案 2 :(得分:1)

您可以使用Process.GetProcesses()来获取正在运行的进程的列表。然后迭代它们并确定是否存在最佳匹配。 (例如,您可能知道它以“3D”开头,并且其名称中只有N个字符,或者大于N等。)然后您可以尝试按照上一个答案中的描述终止该过程。

其他流程属性(例如与优先级相关的属性,StartInfo等)也可能是已知的,并限制了搜索结果。有关完整的属性列表,请参阅here