我试图找出一个应用程序(不是vb.net)的实例是否已经在运行 - 因为我想要启动它但是如果它已经运行我不想启动它。我找到了一个解决方案来检查进程是否正在运行:
Dim proc As Integer = Process.GetProcessesByName(ProcessName).GetUpperBound(0) + 1
如果> = 1(或只是进程号),则返回True。
我的问题是,这是一个第三方应用程序,它的进程名称不只是一个名称,而是包含一个版本号(我在运行时可能不知道),它似乎也添加了一个* 32 (如果它安装在x64中,可能是* 64。)。
我需要按名称获取正在运行的进程列表,并测试" processname"是名称的子字符串。 但是,我没有成功获得名单,只有进程ID。
答案 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
谢谢!