使用System.Diagnostics.Process类调用子进程的奇怪问题
小弟最近在开发一个视频应用,需要用工具将各种视频格式转换成Flash支持的FLV格式,在转换时需要用到FFMpeg和Mencoder这两个工具,后者可以转移wmv和rm格式,而前者可以转换其它格式。
这两个工具都是基于命令行的dos程序,因此我需要使用Process类来调用它们,将取得程序输出出判断是否转换成功。基本代码如下:
Dim p As New Process
p.StartInfo.FileName = "cmd.exe"
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardInput = True
p.StartInfo.RedirectStandardOutput = True
p.StartInfo.RedirectStandardError = True
p.StartInfo.CreateNoWindow = False
Try
p.Start()
p.StandardInput.WriteLine(argm)
p.StandardInput.WriteLine("exit")
Dim strInfo As String = p.StandardOutput.ReadToEnd()
p.Close()
Return True
Catch ex As Exception
End Try
基中argm是己经包装好的FFMpeg或者Mencoder命令,包括exe文件地址及所需参数。
当调用FFmpeg时,没有出现什么问题,但是当调用Mencoder问题就出现了,在转换开始前就出现了一个"Exiting..."的信息,然后就退出Mencoder了,我把argm拷出来直接在命令提示符中执行则一切正常。我看了一下从StandardOutput.ReadToEnd中返回的结果,在Exit...之前的输出与在命令提示符中的输出也不完全一样,这让我百思不得其解,因为我认为不管是通过命令提示符直接执行的命令与通过Process来执行的命令不应该有区别,它们的结果应该是一样的。
这个问题困扰我一个多星期了,请各位朋友帮忙分析一下原因。多谢!!