2009-02-20 49 views
8

Đây là một chút đau đớn vì bây giờ tôi không có mã trước mặt tôi, nhưng tôi sẽ cố gắng giải thích.Tại sao C# ProcessStartInfoRedirectStandardOutput gây xcopy quá trình thất bại

Tôi có một ứng dụng C# đơn giản khởi động kịch bản lệnh Ruby (một vài thứ khác, vì vậy nó tạo ra một tệp lô và thực hiện điều đó).

Tôi đang sử dụng các đối tượng trình C# và tôi đặt redirectstandardoutput sau = true redirectstandarderror = true UseShellExecute = false CreateNoWindow = true (bit đáng yêu của logic ngược đó!)

sau đó tôi tạo ra hai luồng và bình chọn ReadLine() cho cả hai luồng lỗi và đầu ra, chờ cho cả hai kết thúc trước khi tôi gọi WaitForExit().

Bây giờ, không có vấn đề gì tôi làm kịch bản Ruby của tôi không gọi một hệ thống ("xcopy ...") lệnh khi tôi chuyển hướng đầu ra (không có lỗi được tạo ra nó chỉ không sao chép). Nó cũng không sao chép các tệp khác mà tôi yêu cầu sao chép.

Điều này xảy ra nếu tôi chỉ dẫn cả hai luồng vào một chuỗi, một trong số chúng, chỉ chuyển hướng một trong số chúng và chỉ cần gọi ReadToEnd().

Tính năng này chỉ hoạt động chính xác nếu tôi đặt chuyển hướng standardputput và redirectstandarderror thành false.

Tôi thua lỗ hoàn toàn ở đây. Tôi nghĩ có lẽ luồng đầu ra đã được lấp đầy, nhưng tôi không thể tưởng tượng được tại sao nếu tôi gọi ReadLine (tôi cần đọc dòng để tôi có thể phân tích từng dòng và chỉ trình bày dòng liên quan cho người dùng cuối). Tôi cũng nghĩ có thể gọi các lệnh dos từ một tiến trình C# luồng có thể gây ra vấn đề.

Có ai có ý tưởng gì có thể xảy ra ở đây không? Tôi nên nói rằng tôi đang trên VS .net 2005, mà tôi nghĩ là .Net Framework 2.0.

Trả lời

9

Có một số obscure post on the MSDN forums có vẻ như có thể có trục trặc với chính XCOPY - nếu bạn chuyển hướng STDOUT của XCOPY, bạn cũng phải chuyển hướng STDIN.

(lưu ý: Tôi đánh dấu này một cộng đồng wiki, vì vậy ai đó biết ruby ​​có thể viết một số mã ví dụ để chuyển hướng STDIN cho hệ thống())

+0

Đây là vấn đề. Tôi chỉ đơn giản là thiết lập processToRun.StartInfo.RedirectStandardInput = true và xcopy làm việc hoàn hảo. Funnily đủ khi tôi có đầu ra làm việc, tôi sẽ chuyển hướng đầu vào anyway. –

+0

Cảm ơn! Đã có cùng một vấn đề với một kịch bản hàng loạt lớn và đã thử tất cả mọi thứ cho đến khi tôi tìm thấy điều này. – Botz3000

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