执行cmd命令
本文关键字:命令 cmd 执行 | 更新日期: 2023-09-27 17:49:23
我在c#中运行cmd命令,不知怎的,它经常崩溃。我的意思是,当我处理较小的文件时(我运行某种转换软件),它几乎总是成功的,但当我尝试处理较大的文件时,它就崩溃了。我想知道在哪里。因此,我想运行这个命令,看看所有的细节,比如进度。当我在命令行中手动正常运行它时,它是这样写的:欢迎来到…进展:…等等......但我如何在c#中看到呢?我只看到空白的黑色的东西。
这是我的代码。我试着写出标准输出,标准错误,但它似乎很好。所以我唯一的机会是看到运行的东西的细节。
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#由于你在正确的轨道上重定向,你只需要连接你想用它做什么…
请查看这篇文章,但这里是一部分…
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);
}
现在我有答案了,这对我有用。
我尝试了很多方法来写出输出,看看它在哪里崩溃了。
转了几圈后,我意识到当我使用以下两个方法将输出写入txt时,它开始工作了:
我使用cmd: "make html> infooutput.txt"answers"make html 2> infoerrors.txt"。
我无法解释为什么它可以工作,但是当我把这些行放在我调用这个命令的地方时,它开始工作了。非常感谢你的帮助,你可以在评论区找到其他很好的建议,对我来说,他们没有正常工作。