9

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

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

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

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

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

4

4 回答 4

8

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

你可以使用:

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

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

于 2012-06-15T17:11:07.377 回答
7

您可以像这样遍历正在运行的进程:

For Each p As Process In Process.GetProcesses()
   Debug.WriteLine(p.ProcessName)
Next
于 2012-06-15T17:03:14.013 回答
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()
于 2012-06-16T18:18:39.520 回答
0

刚刚尝试了 Reed Copesy 发布的答案,这似乎改变了,对我有用的是:

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

也可以按名称检索数组并直接检查是否包含在进程数组中:

Process.GetProcessesByName(processName).Length > 0

谢谢!

于 2020-04-23T06:33:50.937 回答