System.Diagnostic.Process.Start无效

时间:2012-03-02 17:13:04

标签: .net

我有这段代码

                Process P = new Process();
                P.EnableRaisingEvents = true;
                P.StartInfo = new ProcessStartInfo();
                P.StartInfo.FileName = 11.avi;
                P.StartInfo.UseShellExecute = true;

                P.Start();
                P.WaitForExit();
                P.Dispose();

当我运行它时,Windows Media Player启动并播放avi文件。到目前为止一切都很好,但是当调用WaitForExit时,我得到一个异常 “没有任何过程与此对象相关联” 我做错了什么,将ShellExcecute设置为false也无济于事。真正奇怪的是,如果我使用mkv文件VLC播放器启动并且此代码工作正常。 .avi文件有什么特别之处(文件扩展名我的意思是显然文件类型在这里并不重要)
谢谢

2 个答案:

答案 0 :(得分:0)

AVI没有什么特别之处。从命令行启动时,Media Player会生成一个进程并退出。因此,没有什么可以等待的。 VLC播放器可能不会这样做。

您可以通过打开命令提示符并启动每种类型的文件来查看行为来验证这一点。

请考虑使用Embedding the Windows Media Player Control in a C# Solution中概述的使用媒体播放器的方法。

答案 1 :(得分:0)

由于您已将UseShellExecute设置为true,因此它实际上是启动该进程的操作系统shell。如果您查看已启动的wmplayer实例的父进程,您会发现它实际上不是您的进程启动它(只是测试它,在我的情况下它是svchost.exe实例),因此您的Process instance与实际进程无关。启动流程的原因取决于shell如何处理文件扩展名,因此avi在这里很重要。

请注意,在您的情况下,P.Start();会返回false