在我的桌面上,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;
}
答案 0 :(得分:1)
一个进程可能没有窗口标题。如果我执行此操作:
var runningInstanceList=Process.GetProcessesByName("Chrome")
.Select(proc=>proc.MainWindowTitle)
.ToList();
我将取回16个条目,并且其中只有一个具有MainWindowTitle。 Chrome使用标签和不显示任何标题的后台进程。
如果我使用MicrosoftEdgeCP
,我将取回17个字符串,它们都具有相同的标题Microsoft Edge
。
顺便说一句,您不需要调用.ToList()
来遍历GetProcessByName
返回的数组。 foreach
适用于实现IEnumerable
或IEnumerable<T>
的任何事物。您可以使用LINQ选择所需的项目,以便摆脱循环并将标题逐一添加到结果列表中,例如:
var runningInstanceList=Process.GetProcessesByName("Chrome")
.Select(proc=>new { proc.Id,
proc.ProcessName,
proc.MainWindowTitle
})
.ToList();
将返回唯一的进程ID,名称和窗口标题(如果存在)。
您可以使用Process Explorer并将Window Title
添加到进程列表中,以查看每个应用程序报告的标题。