通过 displayName 文件的名称获取进程
Get proccess by name of displayNameFile
您好,我有一个应用程序可以显示您在电脑中安装的所有应用程序,例如:
google chrome
Mozilla Firefox 63.0.3(x64 zh-CN)
等...
我想通过名称获取每个应用程序的进程。
(比如 Mozilla Firefox 63.0.3(x64 en-GB).getProcess())
感谢您的帮助。
可以获得所有进程的数组:
using System.Diagnostics;
...
Process[] allProcesses = Process.GetProcesses();
然后对于每个进程,您可以找到关于 ProccessModule
that was used to start the process with the Process.MainModule
属性.
的信息(例如文件名、模块名...)
您可以首先使用 WMI 和 FileVersionInfo 构建进程字典。
private static IList<ProcessInfo> BuildProcessDictionary()
{
var wmiQueryString = "SELECT ProcessId, ExecutablePath FROM Win32_Process";
using (var searcher = new ManagementObjectSearcher(wmiQueryString))
using (var results = searcher.Get())
{
var processList = from p in Process.GetProcesses()
join mo in results.Cast<ManagementObject>()
on p.Id equals (int)(uint)mo["ProcessId"]
select new ProcessInfo
{
Process = p,
Path = (string)mo["ExecutablePath"],
DisplayName = (string)mo["ExecutablePath"]!=null?FileVersionInfo.GetVersionInfo((string)mo["ExecutablePath"]).FileDescription:string.Empty
};
return processList.ToList();
}
return default;
}
public class ProcessInfo
{
public string Path { get; set; }
public string DisplayName { get; set; }
public Process Process { get; set; }
}
然后就可以查询集合了
var processDictionary = BuildProcessDictionary();
var found = processDictionary.Where(x => x.DisplayName!=null && x.DisplayName.Equals("Google Chrome"));
更新
var listOfPrograms = new[] { "Google Chrome", "Notepad" };
var processDictionary = BuildProcessDictionary();
foreach (var item in listOfPrograms)
{
try
{
var programInstances = processDictionary.Where(x => x.DisplayName != null && x.DisplayName.Equals(item));
foreach (var programInstance in programInstances)
{
programInstance.Process.Kill();
}
}
catch (Exception )
{
// Log items that wasn't found or coudn't be killed.
Console.WriteLine($"Could not find or kill process {item}");
}
}
您好,我有一个应用程序可以显示您在电脑中安装的所有应用程序,例如:
google chrome Mozilla Firefox 63.0.3(x64 zh-CN) 等...
我想通过名称获取每个应用程序的进程。 (比如 Mozilla Firefox 63.0.3(x64 en-GB).getProcess())
感谢您的帮助。
可以获得所有进程的数组:
using System.Diagnostics;
...
Process[] allProcesses = Process.GetProcesses();
然后对于每个进程,您可以找到关于 ProccessModule
that was used to start the process with the Process.MainModule
属性.
您可以首先使用 WMI 和 FileVersionInfo 构建进程字典。
private static IList<ProcessInfo> BuildProcessDictionary()
{
var wmiQueryString = "SELECT ProcessId, ExecutablePath FROM Win32_Process";
using (var searcher = new ManagementObjectSearcher(wmiQueryString))
using (var results = searcher.Get())
{
var processList = from p in Process.GetProcesses()
join mo in results.Cast<ManagementObject>()
on p.Id equals (int)(uint)mo["ProcessId"]
select new ProcessInfo
{
Process = p,
Path = (string)mo["ExecutablePath"],
DisplayName = (string)mo["ExecutablePath"]!=null?FileVersionInfo.GetVersionInfo((string)mo["ExecutablePath"]).FileDescription:string.Empty
};
return processList.ToList();
}
return default;
}
public class ProcessInfo
{
public string Path { get; set; }
public string DisplayName { get; set; }
public Process Process { get; set; }
}
然后就可以查询集合了
var processDictionary = BuildProcessDictionary();
var found = processDictionary.Where(x => x.DisplayName!=null && x.DisplayName.Equals("Google Chrome"));
更新
var listOfPrograms = new[] { "Google Chrome", "Notepad" };
var processDictionary = BuildProcessDictionary();
foreach (var item in listOfPrograms)
{
try
{
var programInstances = processDictionary.Where(x => x.DisplayName != null && x.DisplayName.Equals(item));
foreach (var programInstance in programInstances)
{
programInstance.Process.Kill();
}
}
catch (Exception )
{
// Log items that wasn't found or coudn't be killed.
Console.WriteLine($"Could not find or kill process {item}");
}
}