//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();
}

异步执行Dos命令的更多相关文章

  1. c#执行Dos命令

    一个执行Dos命令的窗口程序,与各位分享.   效果图:     具体实现在代码中有详细的注释,请看代码.   实现执行CMD命令的核心代码(Cmd.cs):   [csharp]   using S ...

  2. 一个执行Dos命令的窗口程序,与各位分享。

    一个执行Dos命令的窗口程序,与各位分享.   效果图:     具体实现在代码中有详细的注释,请看代码.   实现执行CMD命令的核心代码(Cmd.cs):   [csharp]   using S ...

  3. 【转载】DOS 系统和 Windows 系统有什么关系?为什么windows系统下可以执行dos命令?

    作者:bombless 因为不同的系统都叫 Windows ,这些系统在界面上也有一定连续性并且因此可能造成误解,所以有必要稍微梳理一下几个不同的 Windows 系统.首先是 DOS 上的一个图形界 ...

  4. C#执行外部程序之执行DOS命令和批处理

    在项目开发中,有时候要处理一些文件,比如视频格式的转换,如果用C开发一套算法,再用C#调用,未免得不偿失!有时候调用现有的程序反而更加方便.今天就来说一下C#中如何调用外部程序,执行一些特殊任务. 这 ...

  5. C#执行DOS命令(CMD命令)

    在c#程序中,有时会用到调用cmd命令完成一些功能,于是在网上查到了如下方法,实现了c#执行DOS命令,并返回结果.         //dosCommand Dos命令语句         publ ...

  6. 在.net中悄悄执行dos命令,并获取执行的结果(转)

    一.怎样使dos命令悄悄执行,而不弹出控制台窗口? 1.需要执行带“/C”参数的“cmd.exe”命令,它表示执行完命令后立即退出控制台.2.设置startInfo.UseShellExecute = ...

  7. C# 执行DOS命令和批处理

    在项目开发中,有时候要处理一些文件,比如视频格式的转换,如果用C开发一套算法,再用C#调用,未免得不偿失!有时候调用现有的程序反而更加方便.今天就来说一下C#中如何调用外部程序,执行一些特殊任务. 这 ...

  8. Python3执行DOS命令并截取其输出到一个列表字符串,同时写入一个文件

    #执行DOS命令并截取其输出到一个列表字符串,同时写入一个文件#这个功能很有用listing=os.popen('ipconfig').readlines()for i in listing: pri ...

  9. C#中执行Dos命令

    //dosCommand Dos命令语句 public string Execute(string dosCommand) { ); } /// <summary> /// 执行DOS命令 ...

随机推荐

  1. 【翻译自mos文章】v$undostat视图没有依照每10分钟进行更新,v$undostat仅仅有1行(one rows)

    v$undostat视图没有依照每10分钟进行更新,v$undostat仅仅有1行(one rows) 參考原文: The V$UNDOSTAT view is not getting updated ...

  2. 候选键(unique)

    foreign key references  除了关联外键,还可以关联 候选键(unique) 需求 table1 中的  status  int  类型 ,表示状态 ,0 未启动 ,1 已启动,2 ...

  3. NET Framework 4.5 五个新特性

    .NET Framework 4.5 五个新特性 Framework 4.5 已经开发了几个项目了,想去研究一下VS 2015 里面的跨平台..不过好像4.5内核新特性还没搞明白呢还是先看看4.5内核 ...

  4. Android底层音频声道耳机插头和开关壳体的发展

    Android潜在的发展耳机插头连接到音频频道切换的例子 因为使用的是耳机 麦克分离式的耳机,所以要分别上报事件.在Android系统层耳机插孔的检測是基于/sys/class/switch/h2w/ ...

  5. POJ 1947 树DP获得冠军

    特定N点,N-1的关系.建立了一棵树,问至少减去几个边缘节点可以被作为得到P树.树典型DP称号 dp[cur][j] :记录cur节点,为了得到一个j除去该子树的节点的边的最小数目 对当前树的每个子树 ...

  6. 转载:善待Redis中的数据

    Redis是我们数据的保管者,我们可以随时存随时取,大的小的,重要的不重要的,它都毫无怨言的帮我们保存着,甚至有些时候,我们变得很懒,存东西进去的时候顺便还贴张纸:"过了一个星期就帮我扔了吧 ...

  7. ProvissyTool Update Support Page

    DO NOT REPLY. ############# #??????# ############

  8. JQUERY 插件开发——MENU(导航菜单)

    JQUERY 插件开发——MENU(导航菜单) 故事背景:由于最近太忙了,已经很久没有写jquery插件开发系列了.但是凭着自己对这方面的爱好,我还是抽了一些时间来过一下插件瘾的.今天的主题是导航菜单 ...

  9. Asp.Net MVC页面静态化功能实现一:利用IHttpModule和ResultFilter

    由于公司现在所采用的是一套CMS内容管理系统的框架,所以最近项目中有一个需求提到要求实现页面静态化的功能.在网上查询了一些资料和文献,最后采用的是小尾鱼的池塘提供的 利用ResultFilter实现a ...

  10. 所有MVP文章

    http://msdn.microsoft.com/zh-cn/dd346590.aspx