【问题标题】:How to monitor a process that launches "dllhost.exe"?如何监控启动“dllhost.exe”的进程?
【发布时间】:2013-07-03 14:26:13
【问题描述】:

更新

我有一个与Process.Start(); 相关的问题 我的程序将文件作为进程启动,如下所示:

Process processMonitor = new Process();    
processMonitor.StartInfo.FileName = filePath; // Example: @"C:\test.txt"
processMonitor.StartInfo.CreateNoWindow = true;
processMonitor.Exited += new EventHandler(Process_Exited);
processMonitor.EnableRaisingEvents = true;
processMonitor.Start();

// Handle Exited event and display process information. 
private void Process_Exited(object sender, EventArgs e)
{
    // This code is called on every exit, except images: (Windows Photo Viewer, *jpg, *png, *bmp etc.)
}

这成功地启动了一个进程,notepad.exe 和正确的文件。 捕捉 Exited 事件也有效,所以基本上我已经准备好监控进程的关闭事件。

现在解决问题...

当做完全一样的时候,但现在是一张图片:

processMonitor.StartInfo.FileName = filePath; // Example: @"C:\test.jpg"

这不成功..进程完美启动,但我无法检测到进程是否曾经关闭。一项小研究向我展示了一个名为:

DLLHOST.EXE(COM 代理)

已启动,我无法检测到此进程的 Exited 事件。

谁能帮助我,或者至少指出我正确的方向?

【问题讨论】:

  • 您需要发布准确代码。您没有订阅 Exited 事件,将 CreateNoWindow 设置为 true 没有意义。
  • 我遇到了一个更奇怪的问题,即Process 从调用Start("http://www.google.com")(在我的系统上打开默认浏览器,即Google Chrome)返回的是null?我想得到它的MainWindowHandle,...但是因为它是null,所以我不能用它做任何事情(在开始之后)。
  • 更新得更清楚,就像@HansPassant问的那样

标签: c# winforms process


【解决方案1】:

如果所有其他方法都不起作用,您可以查看 WMI:http://msdn.microsoft.com/en-us/library/aa394582(v=vs.85).aspx - 这将需要您进行一些包装工作(或使用包装器,例如这里的包装器:http://www.codeproject.com/Articles/21971/WMI-Interface-for-NET

作为最后手段和解决方法的另一个选项是轮询进程状态,但对于大多数项目来说确实不建议这样做,而且这听起来肯定不像你想在项目中做的事情。

【讨论】:

    【解决方案2】:

    我认为这与图像的性质有关。打开 .txt 文件会启动记事本,而打开 .jpg 文件会打开查看器。有什么方法可以键入查看器本身?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多