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
}