окна cmd не показывают выходные данные

#c# #cmd

#c# #cmd

Вопрос:

У меня возникла проблема, из-за которой мои окна cmd просто пусты при выполнении из кода. Я искал здесь и там некоторые решения. И сам попробовал несколько разных вещей.

Запуск его с обычным файлом .bat работает просто отлично.. Но только не из моего приложения на C #.

Примечание: ffmpeg выполняется отлично, но просто ничего не показывает в окне cmd при выполнении из кода.

изображение внизу. Я обновлю это, если найду решение.. Если вы, ребята, не сделаете это первыми 😉

Код:

       private async void RunFfmpeg()
    {
        await Task.Run(() =>
        {
        String destFolder = null;
        String sourceFolder = null;
        int listCount = 0;

        this.Dispatcher.Invoke(() =>
        {
            destFolder = textDest.Text;
            sourceFolder = textSource.Text;
            listCount = listFiles.Items.Count;
        });



        foreach (FileInfo fileC in listFiles.Items)
        {
            //Changing old extension to mp4
            string oldFileName = fileC.ToString();
            string newFileName = null;

            string[] extension = oldFileName.Split('.');

            newFileName = extension[0]   ".mp4";

            string newDir = destFolder   "\"   extension[0];
            DirectoryInfo createDir = new DirectoryInfo(newDir);

            if (!createDir.Exists)
            {
                createDir.Create();
            }

            //Gathering folders and all I need...
            string output = """   destFolder   "\"   extension[0]   "\"   newFileName   """;
            string input = """   sourceFolder   "\"   oldFileName   """;

                var startInfo = new System.Diagnostics.ProcessStartInfo
                {
                    FileName = "cmd.exe",
                    //Arguments = $"-i {input} {output}",
                    Arguments = $"/c ffmpeg -i {input}"   " -c:a copy -c:v copy "   $"{output}",
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    CreateNoWindow = false,
                    WorkingDirectory = Directory.GetCurrentDirectory()
                };
                Process p = new Process();
                p.StartInfo = startInfo;
                p.OutputDataReceived  = P_OutputDataReceived;
                p.Start();
                p.WaitForExit();
            }
        });
    }
  

Вот где я прочитал выходные данные:

         private void P_OutputDataReceived(object sender, DataReceivedEventArgs e)
    {
        this.Dispatcher.Invoke(() =>
        {
            //string cmdBox = cmdOutput.Text;
            //cmdOutput.AppendText(cmdBox);
            //cmdOutput.Clear();
            cmdOutput.AppendText(e.Data);
        });
    }
  

Изображения, показывающие пустой cmd

Комментарии:

1. Куда вы записываете стандартный вывод? Похоже, что вы выполняете копирование в файл. Вы проверили выходной файл, чтобы увидеть временную метку и размер?

2. @jdweng Я использую ffmpeg для преобразования файла / files. И у него есть собственный вывод, когда вы его запускаете. Например, показывает, сколько кадров и времени он использовал. Итак, когда я запускаю ffmpeg.exe из файла bat откроется окно cmd с выводом обновления. Я использую outputdatarecieved. Но это не моя текущая проблема… Проблема в том, что окно cmd, которое открывается из моего приложения, представляет собой просто черную пустую страницу.. Не отображается вывод ffmpeg.

3. Выводится ли стандартный вывод или стандартная ошибка?

4. @jdweng стандартный вывод. Но я обновил свой предыдущий ответ..

5. Попробуйте добавить сброс, который будет принимать текущий поток, и убедитесь, что он отправляется в командное окно.