从Visual Studio 2008运行cmd/c#
问题描述:
我是c#的新手,并试图从c#脚本运行一个名为mediainfo的cmd工具实用程序。我试图通过输出执行结果到一个文本文件(file1out.txt)重定向,并从CMD控制台直行以下工作时: C:\programs\mediainfo_cli\mediainfo.exe --Inform=file://C:\temp\template.txt "C:\temp\3gp\file1.3gp" > c:\temp\3gp\file1out.txt
从Visual Studio 2008运行cmd/c#
然而,从脚本这是行不通的。
private void button1_Click(object sender, EventArgs e)
{
LaunchCommandLineApp();
}
static void LaunchCommandLineApp()
{
// Use ProcessStartInfo class
ProcessStartInfo startInfo = new ProcessStartInfo();
string strArg = @" --Inform=file://C:\temp\template.txt C:\temp\3gp\file1.3gp > C:\temp\3gp\file1out.txt";
//startInfo.FileName = "calc.exe";
startInfo.FileName = "C:\\Programs\\mediainfo_cli\\mediainfo.exe";
startInfo.Arguments = strArg;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
try
{
using (Process exeProcess = Process.Start(startInfo))
{
exeProcess.WaitForExit();
}
}
catch
{
MessageBox.Show("Error");
}
}
答
重定向操作符(>)是Windows命令处理器的一项功能。您实际上并没有使用Process.Start调用命令处理器(除非您启动“cmd.exe”)。要使用stdio重定向,您必须从StandardOutput流中读取它。这里说明了如何做到这一点的例子:
你几乎得到了它!
答
你不能这样做重定向。 Cmd.exe处理看到“> file.txt”并在执行该过程之前设置重定向。
从strArg中删除“> file.txt”。开始该过程后,您需要读取StandardOutput流并将数据写入文件。这里有一个简单的例子:http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput.aspx
谢谢保罗,明白了! :) – user491805 2010-11-01 16:55:01