我在C#中创建一个WPF应用程序,它将监视计算机上运行的进程。我希望能够收集当前正在运行的进程列表,并将它们与我想要运行的进程列表进行比较。如果我想运行的进程尚未运行,那么我的应用程序将启动它。
我在按名称获取进程时遇到问题,因为我有许多进程从一个父应用程序运行(它们都以不同的可执行参数启动),因此它们都具有相同的进程名称。我也不能使用进程ID,因为我无法知道在我的应用程序之外启动的进程的PID。我需要一些方法来区分我的应用程序内外的进程,以便我可以判断它们是否已经在运行。感谢任何帮助。谢谢。
答案 0 :(得分:0)
尝试通过以下操作查找本地计算机中的所有进程。
Process[] localAll = Process.GetProcesses();
https://msdn.microsoft.com/en-us/library/1f3ys1f9(v=VS.110).aspx
答案 1 :(得分:0)
根据建议here,您可以通过执行以下操作查询具有WMI的流程的命令行参数,例如,如果您有ProcessId:
var wmiQuery = string.Format("select CommandLine from Win32_Process where ProcessId='{0}'", processId);
var searcher = new ManagementObjectSearcher(wmiQuery);
var retObjectCollection = searcher.Get();
foreach (ManagementObject retObject in retObjectCollection)
Console.WriteLine("[{0}]", retObject["CommandLine"]);
您可以使用与Win32_Process类似的查询来查找具有相同ProcessName的所有ProcessId。