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

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

作者:乔山办公网日期:

返回目录: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();
C井调用.exe文件执行多行命令时经常意外中止

相关阅读

  • 电脑密码破解之,简单易用-word密码破解

  • 乔山办公网word文档
  • word密码破解,现在电脑的普及,很多人给电脑设置了密码,但是由于时间长了忘记了,怎么办?小编今天教大家怎么简单清除电脑password电脑密码破解方法二:电脑开机密码忘记了怎么办
关键词不能为空
极力推荐

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