//Minute
const int _defaultTimeOut = 24 * 60; /// <summary>
/// 执行命令行
/// </summary>
/// <param name="cmdLine">程序集名称(或批处理文件)</param>
/// <param name="args">参数</param>
/// <param name="outputsAction">处理命令行的输出流信息</param>
/// <param name="errorsAction">处理命令行的错误输出信息</param>
/// <param name="timeOut">超时时间(单位:分钟)</param>
public static void ExecuteCommandeLine(String cmdLine, String args, Action<object, DataReceivedEventArgs> outputsAction, Action<object, DataReceivedEventArgs> errorsAction, int timeOut = _defaultTimeOut)
{
Process process = new Process();
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.StartInfo.UseShellExecute = false;
process.StartInfo.LoadUserProfile = true;
process.StartInfo.StandardOutputEncoding = Encoding.UTF8; if (cmdLine.ToLower().Contains(".bat"))
{
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/c" + " " + cmdLine + " " + args;
}
else
{
process.StartInfo.FileName = cmdLine;
process.StartInfo.Arguments = args;
}
if (outputsAction != null)
process.OutputDataReceived += new DataReceivedEventHandler(outputsAction);
if (errorsAction != null)
process.ErrorDataReceived += new DataReceivedEventHandler(errorsAction); process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine(); int i = 0;
while (!process.HasExited)
{
if (i++ > timeOut * 60 && !process.HasExited)
{
process.Kill();
process.Close();
throw new Exception(string.Format("Command line execution timeout.cmdLine:{0},args:{1}", cmdLine, args));
}
Thread.Sleep(1000);
}
} /// <summary>
/// 执行命令行
/// </summary>
/// <param name="cmdLine">程序集名称(或批处理文件)</param>
/// <param name="args">参数</param>
/// <param name="outputs">命令行输出信息</param>
/// <param name="errors">命令行输出错误信息</param>
/// <param name="timeOut">超时时间(单位:分钟)</param>
public static void ExecuteCommandeLine(String cmdLine, String args, out string outputs, out string errors, int timeOut = _defaultTimeOut)
{
StringBuilder outputString = new StringBuilder();
StringBuilder errorString = new StringBuilder();
outputs = string.Empty;
errors = string.Empty; ExecuteCommandeLine(cmdLine, args,
(o, d) =>
{
if (d.Data != null && outputString.MaxCapacity > outputString.Length + d.Data.Length + 10)
outputString.AppendLine(d.Data);
},
(o, d) =>
{
if (d.Data != null && errorString.MaxCapacity > errorString.Length + d.Data.Length + 10)
errorString.AppendLine(d.Data);
},
timeOut);
outputs = outputString.ToString();
errors = errorString.ToString();
}

最新文章

  1. redis 集群创建常见几个问题
  2. JAVA 多线程和并发学习笔记(四)
  3. Java多线程系列--“基础篇”09之 interrupt()和线程终止方式
  4. XML于JSON
  5. 【转】JSP总结
  6. iOS-iOS调用相机调用相册【将图片保存到本地相册】
  7. Python 中 Iterator(迭代器)和Iterable(迭代对象)的区别
  8. SQL Server数据库账号密码变更后导致vCenter Server无法访问数据库
  9. Spring3.x企业应用开发实战-Spring+Hibernat架构分析
  10. sql server自定义函数学习笔记
  11. Asp.net常用的三十多个代码(非常实用)
  12. .NET工程师必须掌握的知识点
  13. VMware Workstation 安装 mac OS 时遇到 不可恢复错误: (vcpu-0)
  14. Gartner研究副总裁:人工智能的五点傲慢与偏见
  15. JS貪食蛇網頁代碼
  16. 用C#写一个实现进程监控的自动关机工具
  17. Asp.Net MVC Identity 2.2.1 使用技巧(五)
  18. Python之美[从菜鸟到高手]--NotImplemented小析
  19. Linux Centos 开启防火墙 FirewallD is not running
  20. 关于“为什么不加friend就会提示参数过多”

热门文章

  1. c++使用stmp协议发送电子邮件(163邮箱,TTL非SSL)
  2. 收集的css布局
  3. [ Bubble Sort ]&amp; block
  4. DBUtils的使用
  5. 20款最好的免费的IDES和编辑器
  6. 安卓MonkeyRunner源码分析之与Android设备通讯方式
  7. PhotoShop CC安装抠图插件KnockOut 2
  8. Elegant Box主题wpdb::prepare() 报错[已解决]
  9. Spring Resource之作为依赖的资源
  10. leetcode 第42题 Multiply Strings