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);

  • 相关阅读:
    JAVA中字符串比较equals()和equalsIgnoreCase()的区别
    JAVA字母的大小写转换
    对于java线程的理解
    JAVA实现文件导出Excel
    处理数据库中的null值问题
    POJO、JAVABean、Entity的区别
    Mybatis的choose标签使用
    redis详解
    Spring框架基础解析
    利用 BackgroundService 固定时间间隔执行某动作
  • 原文地址:https://www.cnblogs.com/mili3/p/4936762.html
Copyright © 2011-2022 走看看