运行cmd命令

时间:2014-03-10 15:10:13

标签: c# cmd

我在c#中运行cmd命令,不知何故它通常会崩溃。我的意思是,当我使用较小的文件(我运行某种转换器软件)时,它几乎总是成功,但当我尝试使用较大的文件时,它就会崩溃。我想知道在哪里。因此,我想运行命令并查看所有细节,例如进度。 当我正常运行它,在命令行中手动执行时,它写成:欢迎来到......进度:......等等。但是我怎么能在C#中看到它呢?我只看到空白的黑色东西。

这是我的代码。我试图写出StandardOutput,即StandardError,但它似乎很好。所以我唯一的机会就是看看这些东西的细节。

process = new System.Diagnostics.Process();
startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.FileName = "cmd.exe";
startInfo.WorkingDirectory = dir.Parent.FullName;
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardError = true;
process.StartInfo = startInfo;
process.Start();

process.StandardInput.WriteLine(@"make html");
k = new StreamReader(process.StandardOutput.BaseStream);
process.StandardInput.WriteLine(@"exit");
k.ReadToEnd();

谢谢你们,我希望你能提供帮助。祝你有愉快的一天!

编辑:现在我通过编写make html>看到了输出。 output.txt的 所以现在我的问题是,为什么我可以手动从cmd运行完全相同的命令,为什么我不能从C# 感谢

2 个答案:

答案 0 :(得分:0)

你正处于重定向的正确轨道上,你只需勾起你想要做的事情......

Please check this post但这里有一部分......

startinfo.OutputDataReceived += DOSOutputResultsHandler;

StringBuilder DOSOutputResults = new StringBuilder();


protected void DOSOutputResultsHandler(object sendingProcess,
   System.Diagnostics.DataReceivedEventArgs outLine)
{
   if (!string.IsNullOrEmpty(outLine.Data))
      // track data into the NORMAL output string builder
      DOSOutputResults.Append(Environment.NewLine + outLine.Data);
}

答案 1 :(得分:0)

所以现在我有一个答案,对我有用。

我尝试了很多方法写出输出,看看它崩溃的地方。

经过几次转弯后,我意识到当我将输出写入txt时它会开始工作,具有以下两种方法:

我使用了cmd:" make html> infooutput.txt"和"制作html 2> infoerrors.txt"

我无法解释为什么会这样,但是当我将这些行放在任何地方时,我调用此命令,它开始工作。 非常感谢您的帮助,您可以在评论部分找到其他好的建议,对我来说,他们没有正常工作。