我如何在c#console应用程序中执行CMD命令?

时间:2011-04-06 11:59:56

标签: c# .net mysql sql database

在Windows上的cmd中创建一个mysqldump非常简单,只需:

打开cmd并输入类型mysqldump uroot ppassword database> C:/data.sql

这会生成所需数据库的SQL转储文件。

我正在编写一个控制台应用程序,所以我可以运行这个命令:

-uroot -ppass databse  > location\data.sql

我尝试了以下代码无济于事:

System.Diagnostics.ProcessStartInfo procStartInfo =
    new System.Diagnostics.ProcessStartInfo("cmd", "/c " + cmd); 

如何启动cmd进程并成功发送命令?

4 个答案:

答案 0 :(得分:33)

Process cmd = new Process();

cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;

cmd.Start();

/* execute "dir" */

cmd.StandardInput.WriteLine("dir");
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
Console.WriteLine(cmd.StandardOutput.ReadToEnd());

答案 1 :(得分:6)

你有没有直接调用mysqldump的原因?

ProcessStartInfo procStartInfo = 
    new ProcessStartInfo("mysqldump", "uroot ppassword databse > c:/data.sql");

如果的原因,您的代码应如下所示:

ProcessStartInfo procStartInfo = 
    new ProcessStartInfo("cmd", 
        "/c \"mysqldump uroot ppassword databse > c:/data.sql\"");

的变化:

  • cmd变量中缺少“mysqldump”的地方。
  • 您应该将要在命令行中执行的命令放入引号。

答案 2 :(得分:2)

您是否使用刚刚创建的ProcessStartInfo实例运行Process.Start(psi)?

无论如何,以下应该做的工作:

string commandToExecute = @"c:\windows\system32\calc.exe";
Process.Start(@"cmd", @"/c " + commandToExecute);

答案 3 :(得分:1)

Executing Batch File in C#

检查出来。