-1

我必须杀死一个没有独特名称的进程(一个 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
4

3 回答 3

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
于 2013-08-21T13:41:49.973 回答
1

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

但是,其他一些过程很有可能从这些字母开始,所以在采取这种行动之前,我会说你需要做更多的检查。

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

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

于 2013-08-19T12:36:06.553 回答
1

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

其他进程属性(例如优先级相关属性、StartInfo 等)也可能是已知的,并且会限制您的搜索结果。请参阅此处以获取完整的属性列表。

于 2013-08-19T12:53:43.757 回答