C# 如何监控启动的流程;dllhost.exe“是什么;? 更新
我遇到了一个与C# 如何监控启动的流程;dllhost.exe“是什么;? 更新,c#,winforms,process,C#,Winforms,Process,我遇到了一个与Process.Start()相关的问题 我的程序将文件作为进程启动,如下所示: Process processMonitor = new Process(); processMonitor.StartInfo.FileName = filePath; // Example: @"C:\test.txt" processMonitor.StartInfo.CreateNoWindow = true; processMonitor.Exited += ne
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和正确的文件。
捕获退出的事件也很有效,所以基本上我已经准备好了所有东西来监视流程的关闭事件
现在来看问题。。。
执行完全相同的操作时,但现在对于图像:
processMonitor.StartInfo.FileName = filePath; // Example: @"C:\test.jpg"
这是不成功的。。进程启动得很完美,但我无法检测到进程是否曾经关闭过。一项小小的研究表明,一个叫做:
DLLHOST.EXE(COM代理)
已启动,我无法检测此进程的退出事件
有谁能帮我,或者至少给我指出正确的方向吗?如果所有其他方法都不起作用,你可以查看WMI:-这将需要你做一些包装工作(或者使用包装器,比如这里的包装器:)
另一个您可以用作最后手段和解决方法的选项是轮询进程状态,但大多数项目确实不建议这样做,而且这听起来肯定不像您希望在项目中执行的操作。我认为这与图像的性质有关。打开.txt文件将启动记事本,而打开.jpg文件将打开查看器。有没有办法输入查看器本身?您需要发布准确的代码。您没有订阅退出的事件,将CreateNoWindow设置为true毫无意义。我遇到了一个更奇怪的问题,进程从调用开始(“http://www.google.com“”
(在我的系统上打开默认浏览器,即Google Chrome)是null
?我想得到它的主窗口句柄
。。。但是因为它是null
,所以我不能对它做任何事情(在开始之后)。试试这个:更新以使它更清楚,就像@HansPassant问的那样