zoukankan      html  css  js  c++  java
  • 在.net中悄悄执行dos命令,并获取执行的结果(转)

    一、怎样使dos命令悄悄执行,而不弹出控制台窗口?

    1.需要执行带“/C”参数的“cmd.exe”命令,它表示执行完命令后立即退出控制台。
    2.设置startInfo.UseShellExecute = false;     //不使用系统外壳程序启动进程
    3.设置startInfo.CreateNoWindow = true;     //不创建窗口

    二、怎样得到dos命令的执行结果?

    1.设置startInfo.RedirectStandardOutput = true;   //重定向输出,而不是默认的显示在dos控制台
    2.使用process.StandardOutput来读取结果。

    三、源程序

    我将这一系列操作都封装到了类DosCommandOutput的方法Execute中,请看下面:

    using System;
    using System.Text;
    using System.Diagnostics;

    namespace Wuya.GetDosCommandOutput
    {
    /// <summary>
    /// DOS命令输出类
    /// </summary>
    class DosCommandOutput
    {
      /// <summary>
      /// 执行DOS命令,返回DOS命令的输出
      /// </summary>
      /// <param name="dosCommand">dos命令</param>
      /// <returns>返回输出,如果发生异常,返回空字符串</returns>
      public static string Execute(string dosCommand)
      {
       return Execute(dosCommand, 60 * 1000);
      }
      /// <summary>
      /// 执行DOS命令,返回DOS命令的输出
      /// </summary>
      /// <param name="dosCommand">dos命令</param>
      /// <param name="milliseconds">等待命令执行的时间(单位:毫秒),如果设定为0,则无限等待</param>
      /// <returns>返回输出,如果发生异常,返回空字符串</returns>
      public static string Execute(string dosCommand, int milliseconds)
      {
       string output = "";     //输出字符串
       if (dosCommand != null && dosCommand != "")
       {
        Process process = new Process();     //创建进程对象
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName = "cmd.exe";      //设定需要执行的命令
        startInfo.Arguments = "/C " + dosCommand;   //设定参数,其中的“/C”表示执行完命令后马上退出
        startInfo.UseShellExecute = false;     //不使用系统外壳程序启动
        startInfo.RedirectStandardInput = false;   //不重定向输入
        startInfo.RedirectStandardOutput = true;   //重定向输出
        startInfo.CreateNoWindow = true;     //不创建窗口
        process.StartInfo = startInfo;
        try
        {
         if (process.Start())       //开始进程
         {
          if (milliseconds == 0)
           process.WaitForExit();     //这里无限等待进程结束
          else
           process.WaitForExit(milliseconds);  //这里等待进程结束,等待时间为指定的毫秒
          output = process.StandardOutput.ReadToEnd();//读取进程的输出
         }
        }
        catch
        {
        }
        finally
        {
         if (process != null)
          process.Close();
        }
       }
       return output;
      }
    }
    }

    四、使用示例

    txtResult.Text=DosCommandOutput.Execute(txtCommand.Text);

  • 相关阅读:
    【上班摸鱼】聊天机器人定时发送微博热搜
    【上班摸鱼】企业微信、钉钉、飞书自动提醒基金预估加减仓
    python HTMLTestRunner单元测试报告
    python自动发送邮件
    python unittest模块使用
    python logging模块使用
    python编码安全规范
    python EXCEL处理
    【转】bootstrap, boosting, bagging 几种方法的联系
    【转】GBDT(MART) 迭代决策树入门教程 | 简介
  • 原文地址:https://www.cnblogs.com/mili3/p/4936762.html
Copyright © 2011-2022 走看看