отправка команды в CMD в c # - PullRequest
0 голосов
/ 17 мая 2018

Я хочу просто отправить эту строку в командную строку cmd

string arg= "ffmpeg.exe - i " + txtInput.Text + " " + txtOutput.Text + "";

Я попробовал это

Process.Start("cmd.exe", arg);

Но ничего не происходит, так как я могу выполнить эту команду в cmd, не показываяcmd пользователю?

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

Первое спасибо за идею @fubo этот код работал для меня

 string arg2 = " -i \"E:\\Test Folder\\Sample.mp4\" \"E:\\Test Folder\\sample.avi";

            Process p = new Process();
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.FileName = "E:\\ffmpeg.exe";
            p.StartInfo.Arguments = arg2;
            p.Start();

теперь я могу двигаться дальше и копать ffmpeg глубже, так как я знаю, как его выполнить сейчас:)

0 голосов
/ 17 мая 2018

cmd.exe просто запускает новый экземпляр командной строки. Это похоже на использование powershell.exe. Когда вы уже в cmd и запускаете cmd, разницы нет. Попробуйте поменять местами между powershell.exe и cmd.exe, и это заметно.

Запустите cmd /?, чтобы отобразить список аргументов, которые вы можете использовать против cmd. Одним из которых является cmd /C:

/ C Выполняет команду, указанную в строке, а затем завершается

Вы спросили "как я могу выполнить эту команду в cmd, не показывая cmd пользователю?". Ну, для этого вам также нужно ProcessStartInfo.CreateNoWindow = true. Например:

    void Main()
    {
        string arg = $"/C ffmpeg.exe - i ${txtInput.Text}  ${txtOutput.Text}";
        launch(arg);
    }


static void launch(string arg)
{
    Process proc = new Process
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = "cmd",
            Arguments = arg,
            UseShellExecute = false,
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            CreateNoWindow = true//This is important
        }
    };

    proc.Start();
    proc.WaitForExit();//May need to wait for the process to exit too
}
0 голосов
/ 17 мая 2018

почему бы не запустить ffmpeg.exe напрямую вместо cmd.exe

Process proc = new Process();
proc.StartInfo.FileName = @"c:\foo\ffmpeg.exe";
proc.StartInfo.Arguments = "-i " + txtInput.Text + " -o " + txtOutput.Text;
proc.Start();
proc.WaitForExit();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...