当前位置:编程学习 > C#/ASP.NET >>

System.Diagnostics .Process .Start调用的dos命令

调用了之后dos窗口会出来闪一下,可以让这个窗口不出现嘛?怎么做? --------------------编程问答-------------------- 你建的是控制台程序吧?建WinForm工程就不会有 --------------------编程问答-------------------- 不是,是winform的,要用dos去执行一个文件格式转换的工具, --------------------编程问答-------------------- 调用的代码如下
Info.FileName   = "cmd.exe ";
Info.Arguments = "/c d:\\pro\\deasn9 -b -a d:\\pro\\cme20r80" + " "+"d:\\pro" + "\\"+newfile +" "+ "> "+"d:\\pro"+"\\"+newfile+".txt";
Proc = System.Diagnostics .Process .Start (Info); --------------------编程问答-------------------- /*
  在Windows环境下的所谓shell程序就是dos命令行程序,比如VC的CL.exe命令行编译器,JDK的javac编译器,启动java程序用的java.exe都是标准的shell程序。
  截获一个shell程序的输出是很有用的,比如说您可以自己编写一个IDE(集成开发环境),当用户发出编译指令时候,
  你可以在后台启动shell 调用编译器并截获它们的输出,对这些输出信息进行分析后在更为友好的用户界面上显示出来。
  为了方便起见,我们用C#作为本文的演示语言。
  通常,系统启动Shell程序时缺省给定了3个I/O信道,标准输入(stdin), 标准输出stdout, 标准错误输出stderr。
  之所以这么区分是因为在早期的计算机系统如PDP-11的一些限制。那时没有GUI, 
  将输出分为stdout,stderr可以避免程序的调试信息和正常输出的信息混杂在一起。
  shell程序把它们的输出写入标准输出管道(stdout)、把出错信息写入标准错误管道(stderr)。
  缺省情况下,系统将管道的输出直接送到屏幕,这样一来我们就能看到应用程序运行结果了。 
  为了捕获一个标准控制台应用程序的输出,我们必须把standOutput和standError管道输出重定向到我们自定义的管道。
*/
namespace WindowsShell
{
  public partial class Form1 : Form
  {
    System.IO.StreamWriter sw;  // 定义输出流 sw 作为Shell的标准输入,即命令 
    System.IO.StreamReader sr;  // 定义输出流 sr 作为Shell的标准输出,即正常结果
    System.IO.StreamReader err; // 定义输出流 err 作为Shell的错误输出,即出错结果
    System.Diagnostics.Process p = new System.Diagnostics.Process();
    System.Diagnostics.ProcessStartInfo psI = new System.Diagnostics.ProcessStartInfo(System.Environment.GetEnvironmentVariable("ComSpec"));
    public Form1()
    {
      InitializeComponent();
    }

    private void bt_run_Click(object sender, EventArgs e)
    {
      
      psI.UseShellExecute = false;
      psI.RedirectStandardInput = true;
      psI.RedirectStandardOutput = true;
      psI.RedirectStandardError = true;
      psI.CreateNoWindow = true;
      p.StartInfo = psI;
      Cursor =Cursors.WaitCursor;
      p.Start();
      sw = p.StandardInput;
      sr = p.StandardOutput;
      err = p.StandardError;
      sw.AutoFlush = false; //true

      if (coboCommand.Text != "")
      {
        sw.WriteLine(coboCommand.Text);
      }
      else
      {
        sw.WriteLine("echo 未输入命令");
      }
      sw.Close();
      tbResult.Text = "--开始----------------------------------------------------------------------------";
      tbResult.Text += "输出结果为:\n" + sr.ReadToEnd();
      tbResult.Text += "\n错误信息:\n" + err.ReadToEnd();

      Cursor = Cursors.Default;
    }
  }
} --------------------编程问答-------------------- 解决了吗?我也遇到这个问题
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,