有没有办法在c#应用程序中运行命令提示符命令?如果是这样,我该如何做以下几点:

copy /b Image1.jpg + Archive.rar Image2.jpg

这基本上是在JPG图像中嵌入一个RAR文件。我只是想知道在c#中是否有一种方法可以自动做到这一点。


当前回答

你可以通过以下方法来实现这一点(在其他答案中提到过):

strCmdText = "'/C some command";
Process.Start("CMD.exe", strCmdText);

当我尝试上面列出的方法时,我发现我的自定义命令不能使用上面一些答案的语法。

我发现更复杂的命令需要封装在引号中才能工作:

string strCmdText;
strCmdText = "'/C cd " + path + " && composer update && composer install -o'";
Process.Start("CMD.exe", strCmdText);

其他回答

你可以通过以下方法来实现这一点(在其他答案中提到过):

strCmdText = "'/C some command";
Process.Start("CMD.exe", strCmdText);

当我尝试上面列出的方法时,我发现我的自定义命令不能使用上面一些答案的语法。

我发现更复杂的命令需要封装在引号中才能工作:

string strCmdText;
strCmdText = "'/C cd " + path + " && composer update && composer install -o'";
Process.Start("CMD.exe", strCmdText);

你可以使用RunProcessAsTask包,像这样轻松地异步运行你的进程:

var processResults = await ProcessEx.RunAsync("git.exe", "pull");
//get process result
foreach (var output in processResults.StandardOutput)
{
   Console.WriteLine("Output line: " + output);
}

出于某种原因,上面的答案都没有帮助,似乎他们把错误扫到地毯下,使故障排除变得困难。所以我最终选择了这样的东西,也许它会帮助到其他人:

var proc = new Process
{
    StartInfo = new ProcessStartInfo
    {
        FileName = @"C:\Program Files\Microsoft Visual Studio 14.0\Common7\IDE\tf.exe",
        Arguments = "checkout AndroidManifest.xml",
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true,
        WorkingDirectory = @"C:\MyAndroidApp\"
    }
};

proc.Start();

这里是一个小简单和较少的代码版本。它也会隐藏控制台窗口

System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/C copy /b Image1.jpg + Archive.rar Image2.jpg";
process.Start();

这也可以通过P/调用C标准库的系统函数来实现。

using System.Runtime.InteropServices;

[DllImport("msvcrt.dll")]
public static extern int system(string format);

system("copy Test.txt Test2.txt");

输出:

      1 file(s) copied.