我必须杀死一个没有独特名称的进程(exe文件)。我所知道的只是它的名字的前两个字符,例如“3D”。
如何查找进程名称并将其终止。
这是我的代码,我检查进程是否正在运行,然后是什么?我尝试使用通配符,但它不起作用。
'-- 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
Dim proc() As Process = Process.GetProcessesByName("3D*")
For Each temp As Process In proc
temp.Kill()
Next
答案 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。