#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);
});
}
Комментарии:
1. Куда вы записываете стандартный вывод? Похоже, что вы выполняете копирование в файл. Вы проверили выходной файл, чтобы увидеть временную метку и размер?
2. @jdweng Я использую ffmpeg для преобразования файла / files. И у него есть собственный вывод, когда вы его запускаете. Например, показывает, сколько кадров и времени он использовал. Итак, когда я запускаю ffmpeg.exe из файла bat откроется окно cmd с выводом обновления. Я использую outputdatarecieved. Но это не моя текущая проблема… Проблема в том, что окно cmd, которое открывается из моего приложения, представляет собой просто черную пустую страницу.. Не отображается вывод ffmpeg.
3. Выводится ли стандартный вывод или стандартная ошибка?
4. @jdweng стандартный вывод. Но я обновил свой предыдущий ответ..
5. Попробуйте добавить сброс, который будет принимать текущий поток, и убедитесь, что он отправляется в командное окно.