2010-01-19 27 views
11

Tôi đã gặp khó khăn trong việc đưa ra một "tiến trình con" (một tiến trình bên trong bằng một quy trình blackbox mà tôi đang giám sát qua C# System. Diagnostics.Process)C#: Chuyển hướng đầu ra chuẩn của quy trình đang chạy

Tôi lấy lời khuyên được đưa ra bởi câu trả lời của bài viết trước: here. Và ở đó bạn có thể tìm thấy chi tiết về những gì tôi đã trải qua.

Tại thời điểm này, mặc dù tôi có thể định vị quy trình ssh sinh ra bởi process1.exe, mà tôi đang theo dõi. Tôi không thể chuyển hướng đầu ra cho chương trình C# của tôi, bởi vì nó là một "tiến trình đang chạy", và không được khởi chạy trực tiếp từ C#.

Dường như, tất cả các thuộc tính mà bạn đặt trên đối tượng System.Diagnostics.Process, chỉ có hiệu lực nếu bạn đang khởi chạy rõ ràng quy trình đó từ ứng dụng C# của bạn; nếu một số "quy trình không được quản lý" khác đã khởi chạy quy trình, việc thiết lập chuyển hướng này không có hiệu lực, bởi vì quá trình này đã được khởi chạy bởi một cái gì đó không chỉ định chuyển hướng mà tôi cần.

Có cách nào để chuyển hướng đầu ra của quy trình đã được khởi chạy (quy trình được khởi chạy bởi chương trình mà tôi không có phạm vi để chỉ định chuyển hướng trước khi quá trình này được khởi chạy) không?

Trả lời

1

Thay vì chuyển hướng đầu ra trực tiếp từ tiến trình đang chạy, bạn có thể nắm bắt đầu ra khi nó rời khỏi quá trình A tại đích dự định, chuyển nó vào quy trình mới của bạn không?

+0

Làm cách nào có thể? Tôi đã chuyển hướng tất cả đầu ra từ process1.exe, đến ứng dụng C# của tôi. Tại điểm mà process1 khởi chạy nội bộ ssh.exe (process2), tôi nhận được thêm 3 dòng đầu ra từ process1, và sau đó tất cả đầu ra ngừng, bởi vì process2 là điều duy nhất xuất hiện (tôi nghi ngờ), và tôi không thể chuyển hướng process2 đầu ra, bởi vì nó được khởi chạy nội bộ bởi process1 (mà tôi không thể kiểm soát chuyển hướng). –

2

Giả sử không có giải pháp đơn giản hơn, bạn có thể thử chạy một đoạn mã trong một quy trình khác thông qua CreateRemoteThread(), được giải thích here.

1

Có lẽ bạn có thể xem số code này. Tôi tìm thấy nó khi tìm kiếm một giải pháp để làm cùng một loại điều; tuy nhiên, nó không thực sự liên quá trình.

Nếu điều đó không giúp bạn có thể xem P/Invoking SetStdHandleGetStdHandle được cho là được sử dụng khi chuyển hướng đầu ra tiêu chuẩn. Tôi nghĩ rằng đây là những gì các mẫu mã liên quan đến không để làm cho chuyển hướng xảy ra.

Lưu ý: Tôi vừa xem nội dung này và thực sự không làm cho nó hoạt động bình thường. (Tôi đã có một giải pháp tốt hơn có sẵn cho tôi vì tôi đã truy cập vào mã nguồn xuất ra giao diện điều khiển)

+0

Mặc dù chưa được kiểm tra đầy đủ (hoặc AFAIR thực sự đang hoạt động): http://pastebin.com/m13ab7101 Đây là những gì tôi đã phát triển dựa trên công cụ 'SetStdHandle'. HTH! – cmw

Các vấn đề liên quan