如何在VB.NET中获得正在运行的进程名列表?
我试图找出一个应用程序(不是vb.net)的实例是否已经在运行——因为我想启动它,但如果它已经在运行,我不想启动它。我找到了一个检查进程是否正在运行的解决方案:如何在VB.NET中获得正在运行的进程名列表?,vb.net,process,Vb.net,Process,我试图找出一个应用程序(不是vb.net)的实例是否已经在运行——因为我想启动它,但如果它已经在运行,我不想启动它。我找到了一个检查进程是否正在运行的解决方案: Dim proc As Integer = Process.GetProcessesByName(ProcessName).GetUpperBound(0) + 1 如果>=1(或仅流程编号),则返回True 我的问题是,这是一个第三方应用程序,它的进程名不仅仅是一个名称,它还包含一个版本号(我在运行时可能不知道),而且它似乎还添加
Dim proc As Integer = Process.GetProcessesByName(ProcessName).GetUpperBound(0) + 1
如果>=1(或仅流程编号),则返回True
我的问题是,这是一个第三方应用程序,它的进程名不仅仅是一个名称,它还包含一个版本号(我在运行时可能不知道),而且它似乎还添加了一个*32(如果它安装在x64中,那么可能是*64?)
我需要按名称获取正在运行的进程的列表,并测试“processname”是否是名称的子字符串。
但是我没有成功地获得名称列表,只有进程id。您可以像这样循环运行进程:
For Each p As Process In Process.GetProcesses()
Debug.WriteLine(p.ProcessName)
Next
我需要按名称获取正在运行的进程的列表,并测试“processname”是否是名称的子字符串
您可以使用:
Dim procExists as Boolean = Process.GetProcesses().Any(Function(p) p.Name.Contains(processName))
这将检查所有进程,如果当前执行的进程中存在任何包含processName
的进程,则将procExists
值设置为True。这应该可以处理存在未知版本号以及在64位操作系统上运行时可能出现的*32
(这是WOW64标志,表示它是在64位操作系统上运行的32位进程)。另一种方式:
刚刚尝试了Reed Copesy发布的答案,这似乎有所改变,对我有效的是:
Dim proc以布尔值=Process.getprocesss().Any(函数(p)p.ProcessName.Contains(ProcessName))的形式存在
还可以按名称检索数组,并直接检查是否包含在进程数组中:
Process.getProcessByName(processName).Length>0
谢谢 我试过这个,但“任何”都不行。感谢您解释*32。@emptyheaded只需在文件顶部添加“Import System.Linq”,任何操作都可以。这是一个LINQ扩展方法()@Reed Copsey:它不应该是'p.ProcessName.Contains'而不是p.Name.Contains'吗?我也不确定,是否有不区分大小写的。否则,一些额外的.ToUpper将有助于搜索processname?
Dim psList() As Process
Try
psList = Process.GetProcesses()
For Each p As Process In psList
Console.WriteLine(p.Id.ToString() + " " + p.ProcessName)
Next p
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
Console.ReadKey()