Как да получите отговор от приложението в cmd подкана

Например, пишем C:\app.exe /h, натискаме Enter и получаваме отговор "Command completed".

Windows Form - C# (файл Program.cs)

Има няколко опции за това:

създайте нова конзола:

прикрепен към конзолата:

Тоест, ако стартирате приложението си от вече работеща конзола или от Far Manager, тогава за да получите резултата в изходния им прозорец, използвайте втората опция. Първият, ако трябва да се създаде конзолата.

В .NET, за да стартирате нов процес, използвайте статичния метод Process.Start, който връща екземпляр на класа Process. Този клас има свойство, което предоставя достъп до потока, към който програмата може да извежда съобщения: StandardOutput. Достъпът не се дава директно, а чрез StreamReader, което е още по-удобно. За да може програмата да изведе резултата не на конзолата, а на StandardOutput, е необходимо да активирате опцията RedirectStandardOutput в свойствата на процеса (ProcessStartInfo).

Ако задачата ви е да стартирате конзолно приложение от вашата програма и да прочетете това, което извежда към конзолата, използвайте метода Process.Start, за да стартирате приложението, и използвайте StreamReader, получен от StandardOutput, за да прочетете резултата. Например, можете да прочетете всички данни, които потокът съдържа в текстов формат, като използвате метода ReadToEnd.

Но има един нюанс. Не можете веднага да вземете и прочетете отговора, защото процесът отнема известно време, за да свършите работата и да отпечатате резултата на конзолата. Методът ReadToEnd ще изчака процеса да приключи. Ако искате вашата програма да продължи да функционира, докато чакате (например, преначертайте прозореца, отговорете на действията на потребителя), използвайте метода ReadToEndAsync, койтоще извика делегата при завършване и ще му предаде резултата или метод ReadLine, който се връща при получаване на редове, вместо да чака процеса да приключи.

Примерът е взет и преработен от тази статия: Стартиране на команден ред и получаване на отговор.

Кодът се оказа така (надявам се да няма грешки в него):