4

更新

我有一个与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 事件。

任何人都可以帮助我,或者至少指出我正确的方向吗?

4

2 回答 2

0

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

于 2014-04-09T19:55:00.550 回答
0

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

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

于 2014-04-09T19:50:53.917 回答