如何执行的命令的命令使用C#

问题描述:

我想用C#来执行在CMD这些步骤提示如何执行的命令的命令使用C#

1 - CD C:\ MySQL的\ MySQL服务器5.0 \ BIN

2 - 的mysqldump -uroot -ppassword样品> d:\测试\ 222.sql

手动这样做,我会得到一个名为“222.sql”

我使用下面的代码来做到这一点,但缺少的东西文件..没有任何反应

public void CreateScript_AAR() 
    { 
     string commandLine = @"CD C:\MySQL\MySQL Server 5.0\bin\mysqldump -uroot -ppassword sample> d:\Test\222.sql"""; 
     System.Diagnostics.ProcessStartInfo PSI = new System.Diagnostics.ProcessStartInfo("cmd.exe"); 
     PSI.RedirectStandardInput = true; 
     PSI.RedirectStandardOutput = true; 
     PSI.RedirectStandardError = true; 
     PSI.UseShellExecute = false; 
     System.Diagnostics.Process p = System.Diagnostics.Process.Start(PSI); 
     System.IO.StreamWriter SW = p.StandardInput; 
     System.IO.StreamReader SR = p.StandardOutput; 
     SW.WriteLine(commandLine); 
     SW.Close(); 
    } 

你在执行命令1这两个命令,这不是有效的语法。 你甚至都不需要改变的目录,所以只是从你的命令字符串删除dirchange(CD)。另外,使用报价,如Oded说。

string commandLine = @"""C:\MySQL\MySQL Server 5.0\bin\mysqldump"" -uroot -ppassword sample > d:\Test\222.sql"; 

您还可以直接从您的代码中调用MySqlDump.exe而不使用cmd.exe。捕获其输出并将其写入文件。使用正确的编码编写它非常重要,以便它能够正确恢复。

string binary = @"C:\MySQL\MySQL Server 5.0\bin\mysqldump.exe" 
    string arguments = @"-uroot -ppassword sample" 
    System.Diagnostics.ProcessStartInfo PSI = new System.Diagnostics.ProcessStartInfo(binary, arguments); 
    PSI.RedirectStandardInput = true; 
    PSI.RedirectStandardOutput = true; 
    PSI.RedirectStandardError = true; 
    PSI.UseShellExecute = false; 
    System.Diagnostics.Process p = System.Diagnostics.Process.Start(PSI); 
    Encoding encoding = p.StandardOutput.CurrentEncoding; 
    System.IO.StreamWriter SW = new StreamWriter(@"d:\Test\222.sql", false, encoding); 
    p.WaitOnExit(); 
    string output = p.StandardOutput.ReadToEnd() 
    SW.Write(output) 
    SW.Close(); 
+0

这对我帮助很大。感谢您的问题和答案。 – Indigo 2012-09-27 14:23:02

这就是我用它来满足我的要求的方式。

public static void runResGen() 
    { 
     string ResGen = @"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\ResGen.exe"; 
     string outputPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\resxMerge"; 
     DirectoryInfo dinfo = new DirectoryInfo(outputPath); 
     DirectoryInfo latestdir = dinfo.GetDirectories().OrderByDescending(f => f.CreationTime).FirstOrDefault(); 
     string latestDirectory = latestdir.FullName.ToString(); 
     string arguments = latestDirectory + "\\StringResources.resx /str:c#,,StringResources /publicClass"; 
     ProcessStartInfo PSI = new ProcessStartInfo(ResGen, arguments); 
     PSI.RedirectStandardInput = true; 
     PSI.RedirectStandardOutput = true; 
     PSI.RedirectStandardError = true; 
     PSI.UseShellExecute = false; 
     PSI.CreateNoWindow = true; 
     System.Diagnostics.Process p = System.Diagnostics.Process.Start(PSI); 
     Encoding encoding = p.StandardOutput.CurrentEncoding; 
     p.Close(); 
    }