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

时间:2012-06-15 17:01:16

标签: vb.net process

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

Dim proc As Integer = Process.GetProcessesByName(ProcessName).GetUpperBound(0) + 1 

如果> = 1(或只是进程号),则返回True。

我的问题是,这是一个第三方应用程序,它的进程名称不只是一个名称,而是包含一个版本号(我在运行时可能不知道),它似乎也添加了一个* 32 (如果它安装在x64中,可能是* 64。)。

我需要按名称获取正在运行的进程列表,并测试" processname"是名称的子字符串。 但是,我没有成功获得名单,只有进程ID。

4 个答案:

答案 0 :(得分:7)

您可以循环运行这样的运行流程:

For Each p As Process In Process.GetProcesses()
   Debug.WriteLine(p.ProcessName)
Next

答案 1 :(得分:7)

  

我需要按名称获取正在运行的进程列表,并测试“processname”是否是名称的子字符串。

您可以使用:

Dim procExists as Boolean = Process.GetProcesses().Any(Function(p) p.Name.Contains(processName))

这将查看所有进程,如果当前正在执行的进程中存在包含 procExists的任何进程,则将processName值设置为True。这应该处理未知版本号的存在以及如果你在64位操作系统上运行时可能出现的*32(这是WOW64标志,表示它是在64位操作系统上运行的32位进程)。 / p>

答案 2 :(得分:3)

另一种方式:

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

答案 3 :(得分:0)

只是尝试了Reed Copesy发布的答案,但似乎已经改变了,对我有用的是:

Dim procExists as Boolean = Process.GetProcesses().Any(Function(p) p.ProcessName.Contains(processName))

还可以按名称检索数组并直接检查过程数组中是否包含该数组:

Process.GetProcessesByName(processName).Length > 0

谢谢!