我有这个代码
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文件有什么特别之处(文件扩展名,我的意思是显然文件类型在这里并不重要)
谢谢
发布于 2012-03-03 01:17:43
AVI没有什么特别之处。从命令行启动时,Media Player会衍生一个进程并退出。正因为如此,没有什么需要等待的。VLC播放器可能不会这样做。
您可以通过打开命令提示符并启动每种类型的文件来查看行为来验证这一点。
请考虑使用Embedding the Windows Media Player Control in a C# Solution中概述的媒体播放器的方法。
发布于 2012-03-03 01:36:15
由于您已将UseShellExecute设置为true,因此实际上是操作系统外壳启动了该进程。如果您查看启动的wmplayer实例的父进程,您将看到启动它的实际上不是您的进程(只是测试它,在我的例子中它是一个svchost.exe实例),因此您的Process实例并不与实际的进程相关联。启动进程的方式取决于shell如何处理您的文件扩展名,因此avi在这里很重要。
请注意,在本例中,P.Start();返回false。
https://stackoverflow.com/questions/9537479
复制相似问题