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

问题描述 投票:9回答:4

我想知道一个应用程序(不是vb.net)的实例是否已经在运行--因为我想启动它,但如果它已经在运行,我就不想启动它。我找到了一个检查进程是否在运行的方法。

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

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

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

我需要按名称获取一个正在运行的进程列表,并测试 "processname "是否是名称的子串。但是我还没有成功地得到一个名字的列表,只有进程的id。

vb.net process
4个回答
8
投票

我需要按名称获取一个正在运行的进程列表,并测试 "processname "是否是名称的子串。

你可以使用:

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

这将会查看所有的进程,并设置 "processname "的子串。procExists 值为True,如果任何一个进程 包含 processName 存在于当前执行的进程中。 这应该处理未知版本号的存在以及 *32 如果你运行在64位操作系统上,可能会出现这种情况(WOW64标志表示这是一个运行在64位操作系统上的32位进程)。


7
投票

你可以像这样循环浏览正在运行的进程。

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

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

0
投票

刚试了一下励志哥Copesy发的答案,这个好像改了,对我有用的是:。

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

也可以通过名字检索数组,直接检查是否包含在进程数组中。

Process.GetProcessesByName(processName).Length > 0

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.