C#中隐式操作CMD命令行窗口 (转)

http://apps.hi.baidu.com/share/detail/21583689

MS的CMD命令行是一种重要的操作界面,一些在C#中不那么方便完成的功能,在CMD中几个简单的命令或许就可以轻松搞定,如果能在C#中能完成CMD窗口的功能,那一定可以使我们的程序简便不少。

下面介绍一种常用的在C#程序中调用CMD.exe程序,并且不显示命令行窗口界面,来完成CMD中各种功能的简单方法。

如下所示:

System.Diagnosties.Process p=new
System.Diagnosties.Process();
p.StartInfo.FileName="cmd.exe";//要执行的程序名称
p.StartInfo.UseShellExecute=false;
p.StartInfo.RedirectStanderInput=true;//可能接受来自调用程序的输入信息
p.StartInfo.RedirectStanderOutput=true;//由调用程序获取输出信息
p.StartInfo.CreateNoWindow=true;//不显示程序窗口
p.Start();//启动程序
//向CMD窗口发送输入信息:
p.StanderInput.WriteLine("shutdown
-r t 10"); //10秒后重启(C#中可不好做哦)
//获取CMD窗口的输出信息:
string sOutput =
p.StandardOutput.ReadToEnd();有啦以下代码,就可以神不知鬼不觉的操作CMD啦。总之,Process类是一个非常有用的类,它十分方便的利用第三方的程序扩展了C#的功能。

最好的实现方式是使用事件:

  // some of the flags are not needed
    process
.StartInfo.CreateNoWindow = true;
    process
.StartInfo.ErrorDialog = false;
    process
.StartInfo.UseShellExecute = false;
    process
.StartInfo.RedirectStandardError = true;
    process
.StartInfo.RedirectStandardInput = true;
    process
.StartInfo.RedirectStandardOutput = true;
    process
.EnableRaisingEvents = true;
    process
.OutputDataReceived += process_OutputDataReceived;
    process
.ErrorDataReceived += process_OutputDataReceived;
    process
.Exited += process_Exited;
    process
.Start();
    process
.BeginErrorReadLine();
    process
.BeginOutputReadLine();

   
void process_Exited(object sender, System.EventArgs e)
   
{
       
// do something when process terminates;
   
}

   
void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
   
{
       
// a line is writen to the out stream. you can use it like:
       
string s = e.Data;
   
}

   
void process_ErrorDataReceived(object sender, DataReceivedEventArgs e)
   
{
       
// a line is writen to the out stream. you can use it like:
       
string s = e.Data;
   
}

c#执行shell

        private void Form1_Load(object sender, EventArgs e)

        {

            //实例一个process类

            Process process = new Process();

            //设定程序名

            process.StartInfo.FileName = "cmd.exe";

            //关闭Shell的使用

            process.StartInfo.UseShellExecute = false;

            //重新定向标准输入,输入,错误输出

            process.StartInfo.RedirectStandardInput = true;

            process.StartInfo.RedirectStandardOutput = true;

            process.StartInfo.RedirectStandardError = true;

            //设置cmd窗口不显示

            process.StartInfo.CreateNoWindow = true;

            //开始

            process.Start();

            //输入命令,退出

            process.StandardInput.WriteLine("ping 192.168.0.1");

            //process.StandardInput.WriteLine("netstat");

            process.StandardInput.WriteLine("exit");

            //获取结果

            string strRst = process.StandardOutput.ReadToEnd();

            //显示结果到RichTextBox

            this.richTextBox1.Text = strRst;

        }

线程重定向问题

描叙:打开cmd窗口,进入要编译的目录的d:linuxcase_3,在cmd窗口打开grads程序,在grads程序中执行out.gs,退出grads,退出cmd
编译错误:未重定向
  private void Form1_Load(object sender, EventArgs e)
         {

             //实例一个process类
             Process process = new Process();
             //设定程序名
             process.StartInfo.FileName = "cmd.exe";
             //关闭Shell的使用
             process.StartInfo.UseShellExecute = false;
             //重新定向标准输入,输入,错误输出
             process.StartInfo.RedirectStandardInput = true;
             process.StartInfo.RedirectStandardOutput = true;
             process.StartInfo.RedirectStandardError = true;
             //设置cmd窗口不显示
             process.StartInfo.CreateNoWindow = false;
             //开始
             process.Start();
             //输入命令,退出
             process.StandardInput.WriteLine(@"cd d:linuxcase_3");
             //在cmd中打开grads程序,在进程中产生grads.exe
             process.StandardInput.WriteLine("grads");
             process.StandardInput.WriteLine("y");


             bool isIniit = true;
             Process processTemp;
             while (isIniit)
             {
                 Process[] processeszu = System.Diagnostics.Process.GetProcesses();//获取系统进程

                 string processnamelist = string.Empty;
                 for (int i = 0; i < processeszu.Length - 1; i++)
                 {
                     processTemp = processeszu;
                     if (processTemp.ProcessName == "Grads")//判断Grads这个进程是否打开
                     {
                 processTemp.StartInfo.RedirectStandardInput = true;
                 processTemp.StandardInput.WriteLine(@"out.gs");
                 processTemp.StandardInput.WriteLine("quit");
                       isIniit = false;
                         break;
                     }

                 }
             }
      
               
                 process.StandardInput.WriteLine("exit");
         
             //获取结果

             //显示结果到RichTextBox
             this.richTextBox1.Text = process.StandardOutput.ReadToEnd();
         }

Process类详细介绍

//启动浏览器,并打开指定的地址
            string ipAddress = "127.0.0.1";
            
try
            
{
                IPHostEntry ipHost 
= Dns.Resolve(Dns.GetHostName());
                ipAddress 
= ipHost.AddressList[0].ToString().Trim();
            }

            
catch (Exception)
            

            }

            

            Process p 
= new Process();
            p.StartInfo.FileName 
= "iexplore.exe";
            p.StartInfo.Arguments 
= "http://" + ipAddress + "/WebFinanceAllowance/";
            p.Start();
            p.Close();


            
//关闭打开的进程
            if (!p.HasExited)
            
{
                p.CloseMainWindow();
            }

1//启动资源管理器,并打开指定路径
2            Process.Start("explorer.exe", "C:\\mysql");
//使用process类来执行dos命令
                Process process = new Process();
                process.StartInfo.FileName 
= "cmd.exe";
                process.StartInfo.UseShellExecute 
= false;
                process.StartInfo.RedirectStandardInput 
= true;
                process.StartInfo.RedirectStandardOutput 
= true;
                process.StartInfo.RedirectStandardError 
= true;
                process.StartInfo.CreateNoWindow 
= true;

               

                
//开始卸载
                process.Start();
                process.StandardInput.WriteLine(
"cd C:\\mysql\\bin");
                process.StandardInput.WriteLine(
"net stop mysql");
                process.StandardInput.WriteLine(
"mysqld -remove");
                process.StandardInput.WriteLine(
"exit");
                process.Close();
                
//卸载完毕
 1 //用msiexec.exe执行一个安装程序
 2                string fileName = setupPath + "Installer.msi";
 3                Process p = new Process();
 4                p.StartInfo.FileName = "msiexec.exe";
 5                p.StartInfo.Arguments = string.Format(" /i {0} /passive", fileName);
 6                p.StartInfo.UseShellExecute = false;
 7                p.StartInfo.RedirectStandardInput = true;
 8                p.StartInfo.RedirectStandardOutput = true;
 9                p.StartInfo.CreateNoWindow = false;
10                p.Start();
posted @ 2011-03-30 22:55  董雨  阅读(747)  评论(0编辑  收藏  举报