如何在VB.NET中获得正在运行的进程名列表?

如何在VB.NET中获得正在运行的进程名列表?,vb.net,process,Vb.net,Process,我试图找出一个应用程序(不是vb.net)的实例是否已经在运行——因为我想启动它,但如果它已经在运行,我不想启动它。我找到了一个检查进程是否正在运行的解决方案: Dim proc As Integer = Process.GetProcessesByName(ProcessName).GetUpperBound(0) + 1 如果>=1(或仅流程编号),则返回True 我的问题是,这是一个第三方应用程序,它的进程名不仅仅是一个名称,它还包含一个版本号(我在运行时可能不知道),而且它似乎还添加

我试图找出一个应用程序(不是vb.net)的实例是否已经在运行——因为我想启动它,但如果它已经在运行,我不想启动它。我找到了一个检查进程是否正在运行的解决方案:

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()