Chciałbym uruchomić zewnętrzny program wiersza poleceń z mojej aplikacji Mono / .NET. Na przykład chciałbym uruchomić mencoder . Czy to możliwe:
- Aby uzyskać wynik powłoki wiersza poleceń i zapisać go w polu tekstowym?
- Czy chcesz uzyskać wartość liczbową pokazującą pasek postępu z upływem czasu?
c#
.net
mono
process.start
mocny
źródło
źródło
Możesz przetwarzać dane wyjściowe synchronicznie lub asynchronicznie .
1. Przykład synchroniczny
Zauważ , że lepiej jest przetwarzać zarówno dane wyjściowe, jak i błędy : należy je obsługiwać osobno.
(*) W przypadku niektórych poleceń (tutaj
StartInfo.Arguments
) należy dodać/c
dyrektywę , w przeciwnym razie proces zawiesza się w plikuWaitForExit()
.2. Przykład asynchroniczny
Jeśli nie musisz wykonywać skomplikowanych operacji na danych wyjściowych, możesz ominąć metodę OutputHandler, dodając bezpośrednio procedury obsługi:
źródło
W porządku, dla każdego, kto chce odczytać zarówno Błędy, jak i Wyjścia, ale dostaje impasu w przypadku dowolnego z rozwiązań przedstawionych w innych odpowiedziach (takich jak ja), oto rozwiązanie, które zbudowałem po przeczytaniu wyjaśnienia MSDN dotyczącego
StandardOutput
właściwości.Odpowiedź jest oparta na kodzie T30:
źródło
Standardowym sposobem realizacji tego .NET jest czytanie ze strumienia StandardOutput procesu . Istnieje przykład w połączonych dokumentach MSDN. Podobnie możesz czytać ze StandardError i pisać do StandardInput .
źródło
Możliwe jest uzyskanie danych wyjściowych powłoki wiersza poleceń dla procesu, jak opisano tutaj: http://www.c-sharpcorner.com/UploadFile/edwinlima/SystemDiagnosticProcess12052005035444AM/SystemDiagnosticProcess.aspx
To zależy od mencodera. Jeśli wyświetla ten status w wierszu poleceń, to tak :)
źródło
możesz użyć pamięci współdzielonej dla 2 procesów do komunikacji, sprawdź
MemoryMappedFile
przede wszystkim utworzysz plik odwzorowany
mmf
w pamięci w procesie nadrzędnym za pomocą instrukcji „using”, a następnie utworzysz drugi proces, aż zostanie zakończony, i pozwolisz mu zapisać wynik zammf
pomocąBinaryWriter
, a następnie odczytać wynik zammf
pomocą procesu nadrzędnego, możesz także przekazaćmmf
nazwę za pomocą argumentów wiersza poleceń lub wpisać go na stałe.upewnij się, że w przypadku korzystania z pliku odwzorowanego w procesie nadrzędnym proces potomny zapisuje wynik do pliku odwzorowanego przed zwolnieniem pliku odwzorowanego w procesie nadrzędnym
Przykład: proces nadrzędny
Proces potomny
aby użyć tego przykładu, musisz utworzyć rozwiązanie z 2 projektami w środku, a następnie pobrać wynik kompilacji procesu potomnego z% childDir% / bin / debug i skopiować go do% parentDirectory% / bin / debug, a następnie uruchomić projekt nadrzędny
childDir
iparentDirectory
to nazwy folderów twoich projektów na PC powodzenia :)źródło
Jak uruchomić proces (np. Plik nietoperza, skrypt perla, program konsoli) i wyświetlać standardowe wyjście w formularzu systemu Windows:
Można znaleźć
ProcessCaller
pod tym linkiem: Uruchomienie procesu i wyświetlenie jego standardowego wyjściaźródło
Możesz rejestrować dane wyjściowe procesu za pomocą poniższego kodu:
źródło
Rozwiązaniem, które zadziałało dla mnie w systemie Windows i Linux, jest postęp
źródło