Tôi có thể chạy một quy trình dòng lệnh bằng cách sử dụng process.start()
. Tôi có thể cung cấp đầu vào bằng cách sử dụng đầu vào tiêu chuẩn. Sau đó, khi quá trình yêu cầu đầu vào của người dùng một lần nữa, làm thế nào để chương trình của tôi biết và truyền đầu vào cho exe đó?Chạy dòng lệnh tương tác exe bằng cách sử dụng C#
Trả lời
Có một example here rằng âm thanh tương tự như những gì bạn cần, sử dụng Process.StandardInput
và 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);
}
}
hy vọng rằng sẽ giúp
cảm ơn một lần nữa. nhưng điều này là cụ thể cho sort.exe i m tạo exe tại thời gian chạy cho mọi người dùng. tôi không biết anh ấy sẽ gõ chương trình nào. – rajshades
Tôi nghĩ bạn có thể sử dụng "cmd.exe" thay vì tệp thực thi mà họ đã chọn. Đó là một hack, nhưng nó có thể nhận được công việc làm –
Thưa robert u có thể giải thích làm thế nào để sử dụng cmd.exe cho vấn đề của tôi – rajshades
Nếu tôi hiểu chính xác, tôi nghĩ bạn có thể thực hiện điều này bằng cách chuyển hướng Đầu vào/Đầu ra tiêu chuẩn bằng cách sử dụng RedirectStandardOutput và RedirectStandardInput.
Dự án WinSCP có mẫu C# để biết cách giao tiếp với nó bằng cách này. Bạn có thể tìm thấy nó ở đây: SFTP file transfers in .NET (mặc dù mẫu này chỉ thu thập đầu ra mà không sử dụng nó ở tất cả, nhưng kỹ thuật này nên được như vậy.)
cảm ơn cho trả lời ur. tôi đã thử nó. nhưng quá trình yêu cầu đầu vào của người dùng không được xác định trước. kịch bản giống như 1. Tôi muốn thiết kế trình biên dịch trực tuyến cho C# 2. tôi có thể xây dựng chương trình bằng cách sử dụng mã dom n cretae exe 3. bây giờ tôi muốn chạy exe đó qua C# 4. người dùng có thể viết bất kỳ loại chương trình cần đầu vào của người dùng ở giai đoạn khác. hy vọng u hiểu toàn bộ kịch bản – rajshades
@rajshades: Tôi đã nghĩ rằng sẽ tương tự, mặc dù thay vì gửi tất cả các lệnh trong một lần, bạn sẽ gửi một lệnh, đọc đầu ra, gửi lệnh tiếp theo vv Mặc dù tôi đã không thử nghiệm này. Như một lưu ý chung mặc dù, nếu bạn đang tạo exe, bạn có thể cố gắng để cung cấp cho nó một số cách tốt hơn để giao tiếp với nó (WCF, TCP/IP sockects, tên ống vv)? –
Bạn muốn tìm kiếm IPC. Như robert đã trình bày ở trên, lớp học Process
trong .NET sẽ giúp bạn. Nhưng cụ thể cho vấn đề của bạn (làm thế nào để biết khi nào cần viết dữ liệu): Bạn không thể. Không nói chung.
Nếu bạn biết đầu vào được yêu cầu (ví dụ: "yyy"), bạn có thể cung cấp nó trong STDIN
của quá trình được tạo. Bạn không phải chờ chương trình yêu cầu thông tin này: Nó sẽ chỉ đọc từ STDIN
khi nó muốn dữ liệu.
Nếu bạn cần xử lý đầu ra chương trình để quyết định nội dung cần ghi vào STDIN
, hãy thử đọc các quy trình STDOUT
. Bạn có thể gặp vấn đề với xả nước, mặc dù ...
- 1. Cách đưa đầu vào tương tác vào tập lệnh được chạy từ dòng lệnh
- 2. Nhập dữ liệu vào ứng dụng dòng lệnh tương tác
- 3. chạy lệnh trong cmd bằng cách sử dụng C#
- 4. Chạy các lệnh tương tác trong Paramiko
- 5. Tương tác nhập dòng tiêu đề để đặt mục nhập bằng cách sử dụng ảnh chụp
- 6. Có thể sử dụng C++ để tương tác với các ứng dụng đang chạy không?
- 7. Khởi chạy ứng dụng (.EXE) từ C#?
- 8. Cách chạy tác vụ Windows 7 hiện có bằng cách sử dụng dấu nhắc lệnh
- 9. Chạy một lệnh tương tác từ bên trong python
- 10. Làm cách nào để chạy ứng dụng Python dòng lệnh tương tác bên trong Emacs trên Win32?
- 11. Sử dụng C# để tương tác với Windows Update
- 12. Chạy tác vụ grunt với api, không có dòng lệnh
- 13. Tôi làm cách nào để viết tập lệnh php tương tác dòng lệnh?
- 14. cách chạy tệp exe với các đối số bằng cách sử dụng python
- 15. Tạo một cơ sở dữ liệu sqlite bằng cách sử dụng dòng lệnh shell trong windows
- 16. Chạy R tương tác từ cửa sổ lệnh nhắc
- 17. C# TWAIN tương tác
- 18. Sử dụng GIT không tương tác
- 19. Thực hiện kịch bản lệnh python theo từng dòng bằng cách sử dụng C++ Python API
- 20. Hợp tác đa tác vụ bằng cách sử dụng TPL
- 21. Cách chạy abc.exe bằng cách sử dụng php
- 22. Chạy .exe từ Javascript
- 23. Notepad ++ sử dụng lệnh "Chạy" trong macro
- 24. Dòng lệnh args trong chương trình C sử dụng Netbeans
- 25. Cách chạy TestNG từ dòng lệnh
- 26. Viết một ứng dụng dòng lệnh tương tác, lười biếng, chức năng trong Clojure
- 27. tạo tệp exe từ python sử dụng đối số dòng lệnh
- 28. cách thực hiện chương trình .exe bằng tập lệnh php
- 29. Cách sử dụng aspell trên dòng lệnh
- 30. Xóa ngắt dòng bằng cách sử dụng C#
Bạn có thể quan tâm đến [bài đăng này] (http://www.codeducky.org/process-handling-net) bao gồm nhiều sự phức tạp khi làm việc. NET quy trình, đặc biệt là xung quanh làm việc với đầu vào và đầu ra – ChaseMedallion