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 按钮后没有任何反应……
请高人指点是怎么回事……
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 按钮后没有任何反应……
请高人指点是怎么回事……
/// <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
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
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();
说明:经常有朋友问如何在C#中运行一个dos命令,并截取输出、输出流的问题,这个问题我以前在Java中实现过,由于在C#中没有遇到过类似的 情况,为了避免每次别人问都要一遍一遍演示的情况,特地做了一个简单的例子,实现在WinForm中ping一个网站,并且将ping的结果显示在一个文本框中。
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();//关闭流
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地址
搞定了……
只是需要将 p.StartInfo.RedirectStandardOutput = true; 就可以了……
不过不懂得是我之后的代码中只调用了重定向标准输入啊……
为什么一定要把 标准输出 也设置为 ture 呢……