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

Tha*_*lia 8 vb.net process

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

Dim proc As Integer = Process.GetProcessesByName(ProcessName).GetUpperBound(0) + 1 
Run Code Online (Sandbox Code Playgroud)

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

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

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

Joh*_*ner 7

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

For Each p As Process In Process.GetProcesses()
   Debug.WriteLine(p.ProcessName)
Next
Run Code Online (Sandbox Code Playgroud)


Ree*_*sey 7

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

你可以使用:

Dim procExists as Boolean = Process.GetProcesses().Any(Function(p) p.Name.Contains(processName))
Run Code Online (Sandbox Code Playgroud)

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

  • @Reed Copsey:它不应该是“p.ProcessName.Contains”而不是 p.Name.Contains?而且我不确定 .Any 是否区分大小写。否则一些额外的 .ToUpper 将有助于搜索进程名称? (2认同)