- 康康map
-
试下用这个函数,p为进程对象,cmd为需要写入的命令,我估计如果命令处理完,后台会把流里面的数据截走,这样长度就会为0,如果不为0代表还未执行结束,我只是这样估计的,不确定能否成功
public void WriteLine(Process p, String cmd)
{
StreamWriter sw = p.StandardInput;
while(sw.BaseStream.Length>0);
sw.WriteLine(cmd);
sw.Flush();
}
- 皮皮
-
调用cmd命令的代码
#region 停止录象-压缩成flv
private void Stop_Click(object sender, EventArgs e)
{
this.ChangeView();
Close();
}
/// <summary>
/// 压缩成flv
/// </summary>
private void ChangeView()
{
stnameflv = stname + ".flv";
string str = @""+fileName+" "+stnameflv+"";
//string str = @"f: est.avi f: est_allen.flv";
RunFFMpeg(str);
}
//运行FFMpeg的视频解码,
public void RunFFMpeg(string strCmd)
{
//创建并启动一个新进程
Process p = new Process();
//设置进程启动信息属性StartInfo,这是ProcessStartInfo类,包括了一些属性和方法:
p.StartInfo.FileName = @"F:ffmpeg.exe"; //程序名
p.StartInfo.Arguments = " -i " + strCmd; //执行参数
p.Start();
}
//运行Cmd.exe执行Dos 命令,并返回执行结果
public string RunCmd(string command)
{
//创建并启动一个对进程
Process p = new Process();
//Process类有一个StartInfo属性,这是ProcessStartInfo类,包括了一些属性和方法,例如:
p.StartInfo.FileName = "cmd.exe"; //程序名
p.StartInfo.Arguments = " /c " + command; //执行参数
p.StartInfo.UseShellExecute = false; //关闭Shell的使用
p.StartInfo.RedirectStandardInput = true; //重定向标准输入
p.StartInfo.RedirectStandardOutput = true; //重定向标准输出
p.StartInfo.RedirectStandardError = true; //重定向错误输出
p.StartInfo.CreateNoWindow = true; //设置不显示窗口
p.Start();
//p.StandardInput.WriteLine(command); //也可以用这种方式输入要执行的命令
//p.StandardInput.WriteLine("exit"); //不过要记得加上Exit要不然下一行程式执行的时候会当机
//必须创建可以自动转换完成以后,结束进程的代码
return p.StandardOutput.ReadToEnd(); //从输出流取得命令执行结果
}