如何在C#中获取单个进程的多个实例详细信息?

时间:2018-07-26 12:03:21

标签: c#

在我的桌面上,triplE应用程序正在运行。它的进程名称是“ Orig_sysdsner”。这里创建单个进程,但是创建多个实例,每个实例标题将是唯一的。现在,我想使用实例名称获取此过程的所有实例。如何在C#中做到这一点?

我尝试过的以下功能,但获取上次打开的实例详细信息。

public static List<string> GetDGDesignEditorRunningInstance()
{
    List<string> runningInstanceList = new List<string>();
    List<Process> processList = Process.GetProcessesByName("Orig_sysdsner").ToList();
    try
    {
        foreach (Process process in processList)
        {
            //string instanceName = process.MainModule.FileName;
            string instanceName = process.MainWindowTitle;
            runningInstanceList.Add(instanceName);
        }

    }
    catch (Exception ex)
    {
        throw ex;
    }
    return runningInstanceList;
}

1 个答案:

答案 0 :(得分:1)

一个进程可能没有窗口标题。如果我执行此操作:

var runningInstanceList=Process.GetProcessesByName("Chrome")
                           .Select(proc=>proc.MainWindowTitle)
                           .ToList();

我将取回16个条目,并且其中只有一个具有MainWindowTitle。 Chrome使用标签和不显示任何标题的后台进程。

如果我使用MicrosoftEdgeCP,我将取回17个字符串,它们都具有相同的标题Microsoft Edge

顺便说一句,您不需要调用.ToList()来遍历GetProcessByName返回的数组。 foreach适用于实现IEnumerableIEnumerable<T>的任何事物。您可以使用LINQ选择所需的项目,以便摆脱循环并将标题逐一添加到结果列表中,例如:

var runningInstanceList=Process.GetProcessesByName("Chrome")
                           .Select(proc=>new { proc.Id,
                                               proc.ProcessName,
                                               proc.MainWindowTitle
                                             })
                           .ToList();

将返回唯一的进程ID,名称和窗口标题(如果存在)。

您可以使用Process Explorer并将Window Title添加到进程列表中,以查看每个应用程序报告的标题。