Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何监控启动的流程;dllhost.exe“是什么;? 更新_C#_Winforms_Process - Fatal编程技术网

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问的那样