using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;namespace leading_in_educe_DataBase
{
    class Program
    {
        static void Main(string[] args)
        {
            Process p = new Process();                                     p.StartInfo.FileName = "cmd.exe";                              p.StartInfo.UseShellExecute = false;                         p.StartInfo.RedirectStandardInput = true;                     p.StartInfo.CreateNoWindow = true;              p.Start();            p.StandardInput.WriteLine(@"cd C:\Program Files\MySQL\MySQL Server 5.1\bin");            p.StandardInput.WriteLine("C:");            p.StandardInput.WriteLine(@"mysqldump -u 123 -p123456 -h PC-200911231400 -P 3306 mysql > e:\mytest.sql");            p.StandardInput.WriteLine(@"MySQL -h PC-200911231400 -u 123 -p123456 test < e:\mytest.sql ");
                                                              
            p.StandardInput.WriteLine("exit");     
        }
    }
}这是一段备份MySql的代码,可以正确的编译执行……我将Main函数中的代码放到窗体应用程序中的Button点击事件中  代码如下:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.Design;
using System.Diagnostics;
using System.Data.SqlClient;
using MySql.Data.MySqlClient;namespace test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }        private void buttonBack_Click(object sender, EventArgs e)
        {
            Process p = new Process();            p.StartInfo.FileName = "cmd.exe";            p.StartInfo.UseShellExecute = false;            p.StartInfo.RedirectStandardInput = true;            p.StartInfo.CreateNoWindow = true;            p.Start();            p.StandardInput.WriteLine(@"cd C:\Program Files\MySQL\MySQL Server 5.1\bin");            p.StandardInput.WriteLine("C:");            p.StandardInput.WriteLine(@"mysqldump -u 123 -p123456 -h PC-200911231400 -P 3306 mysql > e:\mytest.sql");            p.StandardInput.WriteLine(@"MySQL -h PC-200911231400 -u 123 -p123456 test < e:\mytest.sql ");            p.StandardInput.WriteLine("exit");  
        }
    }
}
调试没有任何错误提示,但是运行 点击 buttonBack 按钮后没有任何反应……
请高人指点是怎么回事……

解决方案 »

  1.   

    C#运用ProcessStartInfo安装服务,卸载服务,启用服务,关闭服务的操作!     
      /// <summary>   
        /// 从CMD运行里面启用服务   
        /// </summary>   
        /// <param name="sender"></param>   
        /// <param name="e"></param>   
        protected void Button4_Click1(object sender, EventArgs e)   
        {   
             //开启服务   
            ProcessStartInfo a = new ProcessStartInfo(@"c:\windows\system32\cmd.exe","/c  net start 服务名");   
            a.WindowStyle = ProcessWindowStyle.Hidden;   
            Process process = Process.Start(a);   
               
               
        }   
        protected void Button5_Click1(object sender, EventArgs e)   
        {   
             //关闭服务   
            ProcessStartInfo a = new ProcessStartInfo(@"c:\windows\system32\cmd.exe","/c  net stop 服务名");   
            a.WindowStyle = ProcessWindowStyle.Hidden;   
            Process process = Process.Start(a);   
               
               
        }   
    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/adsdassadfasdfasdf/archive/2010/05/05/5560330.aspx
      

  2.   

      这是C#调用cmd 启用和关闭服务!
      

  3.   

    Process p = new Process();
       p.StartInfo.FileName = "cmd.exe";
       p.StartInfo.UseShellExecute = false;
       p.StartInfo.RedirectStandardInput = true;
       p.StartInfo.RedirectStandardOutput = true;
       p.StartInfo.RedirectStandardError = true;
       p.StartInfo.CreateNoWindow = true;
       p.Start();
       string strOutput=null;
    //   p.StandardInput.WriteLine("cd D:\\flv\\mplayer");
    //   p.StandardInput.WriteLine("cd d:");
       p.StandardInput.WriteLine(string.Format("D:\\flv\\mplayer\\mencoder \"c:\\vs.wmv\" -o \"c:\\output.flv\" -of lavf  -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:vbitrate={0}:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6:vb_strategy=1 -vf scale=512:-3 -ofps 12 -srate 22050",200));
       
       p.StandardInput.WriteLine("exit");
       strOutput = p.StandardOutput.ReadToEnd();
       Console.WriteLine(strOutput);
       p.WaitForExit();
       p.Close();
    参考:
    http://www.cnblogs.com/njnudt/archive/2009/12/03/1616135.html
      

  4.   

    用这段试试            Process p = new Process();
                StreamWriter sw;
                StreamReader sr;
                ProcessStartInfo psI = new ProcessStartInfo("cmd");
                psI.UseShellExecute = false;
                psI.RedirectStandardInput = true;
                psI.RedirectStandardOutput = true;
                psI.RedirectStandardError = true;
                psI.CreateNoWindow = true;
                p.StartInfo = psI;
                p.Start();
                sw = p.StandardInput;
                sr = p.StandardOutput;
                sw.AutoFlush = true;            sw.WriteLine(@"cd C:\Program Files\MySQL\MySQL Server 5.1\bin");            sw.WriteLine("C:");            sw.WriteLine(@"mysqldump -u 123 -p123456 -h PC-200911231400 -P 3306 mysql > e:\mytest.sql");            sw.WriteLine(@"MySQL -h PC-200911231400 -u 123 -p123456 test < e:\mytest.sql ");            sw.WriteLine("exit");
    // output
    string s = sr.ReadToEnd();
      

  5.   

    C#中运行命令行截取输出流的例子
    说明:经常有朋友问如何在C#中运行一个dos命令,并截取输出、输出流的问题,这个问题我以前在Java中实现过,由于在C#中没有遇到过类似的 情况,为了避免每次别人问都要一遍一遍演示的情况,特地做了一个简单的例子,实现在WinForm中ping一个网站,并且将ping的结果显示在一个文本框中。
      

  6.   


    tbResult.Text = "";
                ProcessStartInfo start = new ProcessStartInfo("Ping.exe");//设置运行的命令行文件问ping.exe文件,这个文件系统会自己找到
                //如果是其它exe文件,则有可能需要指定详细路径,如运行winRar.exe
                start.Arguments = txtCommand.Text;//设置命令参数
                start.CreateNoWindow = true;//不显示dos命令行窗口
                start.RedirectStandardOutput = true;//
                start.RedirectStandardInput = true;//
                start.UseShellExecute = false;//是否指定操作系统外壳进程启动程序
                Process p=Process.Start(start);
                StreamReader reader = p.StandardOutput;//截取输出流
                string line = reader.ReadLine();//每次读取一行
                while (!reader.EndOfStream)
                {
                    tbResult.AppendText(line+" ");
                    line = reader.ReadLine();
                }
                p.WaitForExit();//等待程序执行完退出进程
                p.Close();//关闭进程
                reader.Close();//关闭流
      

  7.   

    mysqldump -uroot -psa elab >d:xxx.sql 写在一个 a.bat 文件中。
      Process p = new Process();            p.StartInfo.FileName = @"c:\a.bat";
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                p.StartInfo.CreateNoWindow = true;
                p.StartInfo.RedirectStandardInput = true;
                p.StartInfo.RedirectStandardOutput = true;
                p.Start();            StreamReader sr = p.StandardOutput;
                s = sr.ReadToEnd();            p.WaitForExit();
                p.Close();
    mysqldump地址
      

  8.   


    搞定了……
    只是需要将 p.StartInfo.RedirectStandardOutput = true; 就可以了……
    不过不懂得是我之后的代码中只调用了重定向标准输入啊……
    为什么一定要把 标准输出 也设置为 ture 呢……