Mogę uruchomić proces wiersza poleceń za pomocą process.start()
. Mogę zapewnić wejście przy użyciu standardowego wejścia. Następnie, kiedy proces wymaga ponownego wprowadzenia danych przez użytkownika, w jaki sposób mój program może poznać i przekazać dane wejściowe do tego exe?Uruchom interaktywną linię poleceń exe, używając C#
Odpowiedz
Jest takie example here, które brzmi podobnie do tego, co trzeba, używając Process.StandardInput
i StreamWriter
.
Process sortProcess;
sortProcess = new Process();
sortProcess.StartInfo.FileName = "Sort.exe";
// Set UseShellExecute to false for redirection.
sortProcess.StartInfo.UseShellExecute = false;
// Redirect the standard output of the sort command.
// This stream is read asynchronously using an event handler.
sortProcess.StartInfo.RedirectStandardOutput = true;
sortOutput = new StringBuilder("");
// Set our event handler to asynchronously read the sort output.
sortProcess.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler);
// Redirect standard input as well. This stream
// is used synchronously.
sortProcess.StartInfo.RedirectStandardInput = true;
sortProcess.Start();
// Use a stream writer to synchronously write the sort input.
StreamWriter sortStreamWriter = sortProcess.StandardInput;
// Start the asynchronous read of the sort output stream.
sortProcess.BeginOutputReadLine();
Console.WriteLine("Ready to sort up to 50 lines of text");
String inputText;
int numInputLines = 0;
do
{
Console.WriteLine("Enter a text line (or press the Enter key to stop):");
inputText = Console.ReadLine();
if (!String.IsNullOrEmpty(inputText))
{
numInputLines ++;
sortStreamWriter.WriteLine(inputText);
}
}
nadzieję, że pomoże
dzięki jeszcze raz. ale jest to specyficzne dla sort.exe i m generowania exe w czasie wykonywania dla każdego użytkownika. Nie wiem, jaki program napisze. – rajshades
Myślę, że możesz użyć "cmd.exe" zamiast wybranego pliku wykonywalnego. To jest hack, ale może to zrobić zadanie –
Drogi robert można wyjaśnić, jak używać cmd.exe dla mojego problemu – rajshades
Jeśli dobrze rozumiem, myślę, że powinieneś być w stanie to zrobić, przekierowując standardowe wejście/wyjście przy użyciu RedirectStandardOutput i RedirectStandardInput.
Projekt WinSCP ma próbkę C#, która umożliwia komunikację z nią w ten sposób. Można go znaleźć tutaj: SFTP file transfers in .NET (choć ta próbka zbiera tylko wyjście bez użycia go w ogóle, ale technika powinna być taka sama.)
dzięki za odpowiedź ur. próbowałem tego. ale proces wymagający wprowadzenia użytkownika nie jest wstępnie zdefiniowany. scenariusz jest jak 1. Chcę zaprojektować online kompilator dla C# 2. mogę zbudować program przy użyciu kodu dom n cretae exe 3. teraz chcę uruchomić ten exe poprzez C# 4. użytkownik może napisać dowolny typ program, który potrzebuje danych wprowadzanych przez użytkownika na etapie diff. Mam nadzieję, że zrozumiałeś cały scenariusz – rajshades
@ranshades: Myślałem, że to będzie podobne, ale zamiast wysyłać wszystkie polecenia za jednym razem, możesz wysłać komendę, odczytać wynik, wysłać następne polecenie itp. Chociaż tego nie testowałem. Generalnie jednak, jeśli tworzysz exe, czy nie możesz spróbować dać mu lepszego sposobu komunikowania się z nim (WCF, sockects TCP/IP, nazwy potoków itp.)? –
Chcesz zajrzeć do IPC. Jak pokazał Robert, klasa Process
w .NET pomoże. Ale specjalnie dla twojego problemu (jak wiedzieć, kiedy pisać dane): Nie możesz. Nie generycznie.
Jeśli znasz wymagane dane wejściowe (np. "Yyy"), możesz je podać w utworzonym procesie. Nie musisz czekać, aż program zażąda tych informacji: po prostu odczyta z STDIN
, kiedy chce danych.
Jeśli chcesz przetworzyć wyniki programów, aby zdecydować, co napisać, na STDIN
, spróbuj odczytać procesy STDOUT
. Możesz napotkać problemy z opróżnianiem, ale ...
- 1. Uruchom plik exe z kodu C#
- 2. Uruchom okna poleceń i uruchom komendy wewnątrz
- 3. Uruchom plik EXE z innego katalogu?
- 4. Uruchom aplikację C# na Windows Uruchom
- 5. uruchom exe, który jest zapakowany wewnątrz słoiczka
- 6. Uruchom komendę zdalną przez ssh, używając Maven3
- 7. svn history poprzez linię poleceń
- 8. Uruchom ColdFusion z wiersza poleceń
- 9. Uruchom sqlite3 z pythonem w linii poleceń
- 10. Uruchom transformację web.config z wiersza poleceń
- 11. Jak uzyskać pełną linię poleceń w ruby?
- 12. Jak uzyskać linię wyjściową przez linię używając xlsWriterr
- 13. C++ Szyfrowanie Exe?
- 14. Uruchom pdb bez stdin/stdout używając FIFO
- 15. Jak mogę uruchomić linię poleceń z SmartGit?
- 16. Określ główną linię poleceń klasa Wiosna-Boot
- 17. wyprowadzić linię poleceń wywoływaną przez podproces?
- 18. Uruchom polecenie vim z linii poleceń
- 19. Uruchom plik jar z argumentami wiersza poleceń:
- 20. Python: Uruchom funkcję z linii poleceń
- 21. Uruchom aplikację erlang z wiersza poleceń
- 22. Uruchom emulację Chrome z poziomu wiersza poleceń
- 23. Uruchom program Word 2013 z wiersza poleceń
- 24. Dla poleceń używając devenv.exe biegnie zbyt szybko
- 25. Pobierz pełną linię komend kompilatora C++
- 26. Uruchom cygwin zbudowany exe w oknach bez środowiska cygwin
- 27. Uruchom plik exe z parametrem z SQL Server
- 28. Uruchom rozwiązanie exe po instalacji za pomocą installshield
- 29. Uruchom plik .exe i przekieruj standardowe wejście i wyjście
- 30. Uczyń program Java jako niezależny exe (uruchom bez JVM).
Możesz być zainteresowany [ten post] (http://www.codeducky.org/process-handling-net) obejmujący wiele zawiłości pracy z. Procesów NET, szczególnie w zakresie pracy z wejściem i wyjściem – ChaseMedallion