【问题标题】:Differentiating between processes with the same name outside of my application?在我的应用程序之外区分具有相同名称的进程?
【发布时间】:2015-07-21 18:27:31
【问题描述】:

我正在用 C# 创建一个 WPF 应用程序,它将监视机器上运行的进程。我希望能够收集当前正在运行的进程列表并将它们与我想要运行的进程列表进行比较。如果我要运行的进程尚未运行,那么我的应用程序将启动它。

我在按名称获取进程时遇到问题,因为我有许多进程从一个父应用程序运行(它们都以不同的可执行参数启动),因此它们都具有相同的进程名称。我也不能使用进程 ID,因为我无法知道在我的应用程序之外启动的进程的 PID。我需要某种方法来区分在我的应用程序内外启动的进程,以便我可以判断它们是否已经在运行。任何帮助表示赞赏,谢谢。

【问题讨论】:

  • 你检查过命令路径
  • 欢迎来到 StackOverflow!到目前为止,您可以包含您尝试的代码吗?
  • 但是你可以阅读他们的命令行:stackoverflow.com/questions/504208/…
  • I have numerous processes running off of one parent application (they are all started with different executable parameters) so they all have the same process name. 是您自己的父应用程序吗?还是第三方应用?
  • 父应用是一个庞大的第三方应用。我目前在一家公司实习,所以我不能发布代码。我意识到这很难处理,但我只是想知道是否可以通过检查名称以外的内容来区分进程。我会检查他们的命令行,谢谢!

标签: c# wpf


【解决方案1】:

按照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。

【讨论】:

    【解决方案2】:

    尝试执行以下操作以查找本地计算机中的所有进程。

    Process[] localAll = Process.GetProcesses();
    

    https://msdn.microsoft.com/en-us/library/1f3ys1f9(v=VS.110).aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多