我想知道一个应用程序(不是vb.net)的实例是否已经在运行--因为我想启动它,但如果它已经在运行,我就不想启动它。我找到了一个检查进程是否在运行的方法。
Dim proc As Integer = Process.GetProcessesByName(ProcessName).GetUpperBound(0) + 1
如果>=1(或者只是进程号),则返回True。
我的问题是,这是一个第三方应用程序,它的进程名不仅仅是一个名字,还包含了一个版本号(在运行时我可能不知道),而且它似乎还添加了一个*32(所以如果它安装在x64中,可能是一个*64?)。
我需要按名称获取一个正在运行的进程列表,并测试 "processname "是否是名称的子串。但是我还没有成功地得到一个名字的列表,只有进程的id。
我需要按名称获取一个正在运行的进程列表,并测试 "processname "是否是名称的子串。
你可以使用:
Dim procExists as Boolean = Process.GetProcesses().Any(Function(p) p.Name.Contains(processName))
这将会查看所有的进程,并设置 "processname "的子串。procExists
值为True,如果任何一个进程 包含 processName
存在于当前执行的进程中。 这应该处理未知版本号的存在以及 *32
如果你运行在64位操作系统上,可能会出现这种情况(WOW64标志表示这是一个运行在64位操作系统上的32位进程)。
你可以像这样循环浏览正在运行的进程。
For Each p As Process In Process.GetProcesses()
Debug.WriteLine(p.ProcessName)
Next
另一种方法
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()
刚试了一下励志哥Copesy发的答案,这个好像改了,对我有用的是:。
Dim procExists as Boolean = Process.GetProcesses().Any(Function(p) p.ProcessName.Contains(processName))
也可以通过名字检索数组,直接检查是否包含在进程数组中。
Process.GetProcessesByName(processName).Length > 0
谢谢