Я хотел бы запустить внешнюю программу командной строки из моего приложения Mono / .NET. Например, я хотел бы запустить Mencoder . Является ли это возможным:
- Чтобы получить вывод командной строки и написать его в моем текстовом поле?
- Чтобы получить числовое значение для отображения индикатора выполнения по прошествии времени?
c#
.net
mono
process.start
stighy
источник
источник
Вы можете обрабатывать свой вывод синхронно или асинхронно .
1. Синхронный пример
Обратите внимание, что лучше обрабатывать как вывод, так и ошибки : они должны обрабатываться отдельно.
(*) Для некоторых команд (здесь
StartInfo.Arguments
) вы должны добавить/c
директиву , иначе процесс зависнет вWaitForExit()
.2. Асинхронный пример
Если вам не нужно усложнять операции с выводом, вы можете обойти метод OutputHandler, просто добавив обработчики прямо в строку:
источник
Хорошо, для любого, кто хочет прочитать и Ошибки и Выходы, но получает взаимоблокировки с любым из решений, предоставленных в других ответах (как я), вот решение, которое я построил после прочтения пояснения MSDN для
StandardOutput
свойства .Ответ основан на коде T30:
источник
Стандартный способ .NET сделать это - прочитать из потока StandardOutput процесса . Есть пример в связанных документах MSDN. Похоже, вы можете читать из StandardError и записывать в StandardInput .
источник
Можно получить выходные данные оболочки командной строки процесса, как описано здесь: http://www.c-sharpcorner.com/UploadFile/edwinlima/SystemDiagnosticProcess12052005035444AM/SystemDiagnosticProcess.aspx
Это зависит от mencoder. Если он выводит этот статус в командной строке, тогда да :)
источник
Вы можете использовать общую память для двух процессов, чтобы общаться, проверить
MemoryMappedFile
вы в основном создадите файл отображения памяти
mmf
в родительском процессе с помощью оператора «using», затем создадите второй процесс до его завершения и дадите ему записать результат вmmf
использованиеBinaryWriter
, а затем прочитаете результат изmmf
использования родительского процесса, вы также можете передатьmmf
имя с помощью аргументов командной строки или жестко закодировать его.при использовании сопоставленного файла в родительском процессе убедитесь, что дочерний процесс записывает результат в сопоставленный файл, прежде чем сопоставленный файл будет выпущен в родительском процессе.
Пример: родительский процесс
Дочерний процесс
чтобы использовать этот пример, вам нужно создать решение с двумя проектами внутри, затем вы берете результат сборки дочернего процесса из% childDir% / bin / debug и копируете его в% parentDirectory% / bin / debug, затем запускаете родительский проект
childDir
аparentDirectory
имена папок ваших проектов на пк удачи :)источник
Как запустить процесс (такой как bat-файл, скрипт perl, консольная программа) и отобразить его стандартный вывод в форме окна:
Вы можете найти
ProcessCaller
по этой ссылке: Запуск процесса и отображение его стандартного выводаисточник
Вы можете зарегистрировать вывод процесса, используя следующий код:
источник
Решение, которое сработало для меня в win и linux, это фоллинг
источник