乔山办公网我们一直在努力
您的位置:乔山办公网 > word文档 > word向程序发送命令时出现问题-C井调用.exe文件执行多行命令时经常意外中止

word向程序发送命令时出现问题-C井调用.exe文件执行多行命令时经常意外中止

作者:乔山办公网日期:

返回目录:word文档

本来是参考网上的一段代码(博主吐槽非常正确),如下:



  1. string str = Console.ReadLine();
  2. System.Diagnostics.Process p = new System.Diagnostics.Process();
  3. p.StartInfo.FileName = "cmd.exe";
  4. p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动
  5. p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
  6. p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息
  7. p.StartInfo.RedirectStandardError = true;//重定向标准错误输出
  8. p.StartInfo.CreateNoWindow = true;//不显示程序窗口
  9. p.Start();//启动程序
  10. //向cmd窗口发送输入信息
  11. p.StandardInput.WriteLine(str + "&exit");
  12. p.StandardInput.AutoFlush = true;
  13. //获取cmd窗口的输出信息,在执行这一行后C#调用了.exe文件执行
  14. string output = p.StandardOutput.ReadToEnd();
  15. p.WaitForExit();//等待程序执行完退出进程
  16. p.Close();
  17. Console.WriteLine(output);

直接使用这段代码进行多行命令行执行时会出现这么一个问题:可能执行了几行之后就停止了,具体原因没有找到,但是通过国外网友提供的一个官方文档的例子中对代码进行修改后可以正常运行,网址如下:https://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardinput.aspx


为了进行对比我将代码注释进行了一定量的删除,先介绍我的需求情况:需要使用命令行调用一个.exe程序对多个视频进行处理,由于视频路径比较长,视频数量大导致文本长度超过了cmd一次输入文本的长度,因此需要分成多行输入处理,暂时不需要回显cmd的输出,将代码更改如下:



  1. System.Diagnostics.Process p = new System.Diagnostics.Process();
  2. p.StartInfo.FileName = "cmd.exe";
  3. p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动
  4. p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
  5. p.StartInfo.RedirectStandardOutput = false;//不需要获取输出信息
  6. p.StartInfo.RedirectStandardError = false;//不需要重定向标准错误输出
  7. p.StartInfo.CreateNoWindow = true;//不显示程序窗口
  8. p.Start();//启动程序
  9. StreamWriter mySR = p.StandardInput;
  10. //向cmd窗口发送输入信息
  11. for (int nowIdx = 0; nowIdx < videos.Length; nowIdx++)
  12. {
  13. //str表示一行命令
  14. mySR.WriteLine(str);
  15. //这里的Flush()操作和我理解的不一样,尽管flush了但是命令行并没有立即执行
  16. //而且当需要执行的命令行数量十分多的时候,在使用了WriteLine后会在随机行数之后值执行,可能与缓冲区大小有关
  17. mySR.Flush();
  18. }
  19. //这个地方我对于原文所提供的exit和&exit的区别没有完全弄清,以后可能进行补充
  20. p.StandardInput.WriteLine("&exit");
  21. //关闭StreamWriter后,之前输入的命令行会立即执行
  22. mySR.Close();
  23. p.WaitForExit();
  24. p.Close();

相关阅读

关键词不能为空
极力推荐
  • word两端对齐-Word高效排版|让领导看起来舒服

  • 日常工作中,大家经常会遇到复制大篇文字资料到Word上,但是大多数情况下,直接Ctrl+C复制。Ctrl+V粘贴过来的文字,其格式、排版等都很杂乱,甚至不堪入目,得做进一步加工处理,这

ppt怎么做_excel表格制作_office365_word文档_365办公网