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