You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.Net中如何检测以指定前缀开头的进程是否正在运行

VB.Net进程检测问题解答

我来逐个解答你的问题:

1. 用Process.GetProcessesByName("Mozilla")能否找到MozillaFirefox.exe?

答案是不能。原因是Process.GetProcessesByName()方法是精确匹配进程的ProcessName属性——这个属性对应可执行文件去掉.exe后缀后的完整名称,比如MozillaFirefox.exe的ProcessName就是MozillaFirefox。你传入"Mozilla"的话,它只会寻找ProcessName恰好等于Mozilla的进程,不会匹配前缀包含该字符串的进程。

如果要精准找到MozillaFirefox.exe,你需要传入完整的ProcessName:

p = Process.GetProcessesByName("MozillaFirefox")

2. 检测以指定前缀开头的运行进程

如果需要匹配ProcessName以某几个字符开头的进程(比如前5个字符是Mozii),GetProcessesByName无法直接实现,你需要遍历系统中所有进程,再逐个检查名称前缀:

Imports System.Diagnostics
Imports System.Linq

Dim targetPrefix As String = "Mozii"
' 筛选出名称以目标前缀开头的进程,忽略大小写
Dim matchingProcesses As Process() = Process.GetProcesses() _
    .Where(Function(proc) proc.ProcessName.StartsWith(targetPrefix, StringComparison.OrdinalIgnoreCase)) _
    .ToArray()

If matchingProcesses.Count > 0 Then
    ' 存在符合条件的运行进程
    Console.WriteLine($"找到 {matchingProcesses.Count} 个符合条件的进程")
Else
    ' 没有符合条件的运行进程
    Console.WriteLine("未找到符合条件的进程")
End If

这里用StringComparison.OrdinalIgnoreCase是为了忽略大小写差异(比如进程名是moziiXYZ.exe也能被匹配),如果需要严格区分大小写,移除这个参数即可。

3. 便捷检测带版本标识的新版进程

对于名称后缀带有1.7、1.8或2.1这类版本号的进程(比如MyApp1.7.exe、Firefox2.1.exe),可以根据场景选择两种实现方式:

方式一:前缀匹配(简单场景)

如果版本号都是跟在固定前缀后面,直接用StartsWith匹配前缀即可,不管后面的版本号是什么:

Dim appPrefix As String = "Firefox"
Dim matchingProcesses As Process() = Process.GetProcesses() _
    .Where(Function(proc) proc.ProcessName.StartsWith(appPrefix, StringComparison.OrdinalIgnoreCase)) _
    .ToArray()

这样所有前缀为Firefox的进程(比如Firefox1.7、Firefox2.1)都会被匹配到。

方式二:正则表达式(复杂场景)

如果版本号有固定格式(比如X.X或X.X.X),可以用正则表达式做更精确的匹配。比如要匹配前缀为Firefox、后缀是数字.数字格式版本号的进程:

Imports System.Diagnostics
Imports System.Linq
Imports System.Text.RegularExpressions

' 正则规则:以Firefox开头,后面跟至少一个数字+点+至少一个数字,直到结尾
Dim pattern As String = "^Firefox\d+\.\d+$"
Dim regex As New Regex(pattern, RegexOptions.IgnoreCase)

Dim matchingProcesses As Process() = Process.GetProcesses() _
    .Where(Function(proc) regex.IsMatch(proc.ProcessName)) _
    .ToArray()

这个正则表达式可以精准匹配Firefox1.7、Firefox2.1这类进程,不会误匹配不带版本号的Firefox或格式不符的Firefoxabc。

整合后的完整示例代码

把前缀检测的逻辑整合到你的CheckIfRunning方法中:

Imports System.Diagnostics
Imports System.Linq

Dim p() As Process
Private Sub CheckIfRunning()
    Dim targetPrefix As String = "Mozii"
    ' 筛选出名称以目标前缀开头的进程
    p = Process.GetProcesses() _
        .Where(Function(proc) proc.ProcessName.StartsWith(targetPrefix, StringComparison.OrdinalIgnoreCase)) _
        .ToArray()
    
    If p.Count > 0 Then
        ' 进程正在运行
        MessageBox.Show($"检测到 {p.Count} 个符合条件的运行进程!")
    Else
        ' 进程未运行
        MessageBox.Show("未检测到符合条件的运行进程!")
    End If
End Sub

内容的提问来源于stack exchange,提问作者user11605008

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:56:13