使用System.Diagnostics.Process类调用子进程的奇怪问题

misspolo 2007-02-21 02:08:16
小弟最近在开发一个视频应用,需要用工具将各种视频格式转换成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来执行的命令不应该有区别,它们的结果应该是一样的。

这个问题困扰我一个多星期了,请各位朋友帮忙分析一下原因。多谢!!
...全文
266 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqchen79 2007-02-23
  • 打赏
  • 举报
回复
不用cmd.exe,直接启动Mencoder进程。
或者用"cmd.exe /C Mencoder.exe.

---------------------------------------------------------------
http://pointlessly.blogspot.com
jetxia 2007-02-23
  • 打赏
  • 举报
回复
mark
lovehongyun 2007-02-21
  • 打赏
  • 举报
回复
up
misspolo 2007-02-21
  • 打赏
  • 举报
回复
直接在命令行中执行可以,但是用Process调用时就不行。

feiyun0112 2007-02-21
  • 打赏
  • 举报
回复
直接执行Mencoder不行吗?

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

最新版本:20070212

http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧