2012-03-06 39 views
5

Vì vậy, tôi đang viết một ứng dụng theo dõi một ứng dụng giao diện điều khiển được viết bởi một nhà phát triển khác. Các ứng dụng giao diện điều khiển dễ bị rơi và bởi vì nó chạy tất cả các đêm tôi cần ứng dụng của tôi để khởi động lại nó.C# Process.exited doesnt được gọi là cho đến khi sau khi đóng cửa sổ

Unfortunaltey khi ứng dụng giao diện điều khiển gặp sự cố, tôi nhận được thông báo của cửa sổ cho biết "blah đã ngừng hoạt động" và nút cho biết chương trình đóng.

Tôi đang sử dụng System.Diagnostic.Process để khởi động ứng dụng bảng điều khiển nhưng tôi không thể xác định xem ứng dụng bảng điều khiển có bị lỗi cho đến SAU KHI nút chương trình đóng được nhấn hay không. Process.Responding luôn luôn đúng (không có cửa sổ xử lý) Process.exited isnt bắn cho đến sau khi nút chương trình đóng được nhấn.

Bất kỳ ý tưởng nào sẽ hữu ích rất nhiều.

Cảm ơn

+0

Không biết bạn có thể làm gì trong C#, nhưng một tùy chọn có thể là sử dụng công cụ tự động hóa (như AutoIt) để nhấp vào nút Đóng cho bạn. –

+0

Có phải cả hai ứng dụng được viết bằng .NET không? –

+0

không có ứng dụng giao diện điều khiển không được viết với .net – user1253149

Trả lời

2

Tắt tính năng báo cáo sự cố cửa sổ. Nó được hạt nhân thông báo khi một tiến trình không thành công. Quá trình này vẫn còn sống cho đến khi báo cáo sự cố được thực hiện với nó.

Tính năng này có thể bị tắt cho mỗi quá trình sử dụng một số API. Disabling Windows error reporting (Dr. Watson) for my process Đừng vô hiệu hóa toàn cầu để khắc phục sự cố cục bộ.

+0

tôi bị vô hiệu hóa vì vậy nó không tìm kiếm một giải pháp nhưng tôi vẫn nhận được một cửa sổ bật lên. – user1253149

+5

Thực hiện thay đổi toàn hệ thống chỉ dành cho một ứng dụng có vẻ là một cảm ứng nặng tay. –

+0

Tôi không rõ ràng trong câu trả lời ban đầu: Tính năng này có thể bị tắt cho mỗi quá trình sử dụng một số API. http://stackoverflow.com/questions/1134343/disabling-windows-error-reporting-dr-watson-for-my-process – usr

0
  1. đây không phải là trường hợp tốt cho ứng dụng bảng điều khiển. A windows service hoặc scheduled task sẽ phù hợp hơn.

  2. ứng dụng giao diện điều khiển của bạn bị lỗi, bởi vì bạn không có bất kỳ error handling

  3. là người khác nói, quá trình của bạn đang được treo bởi windows error reporting

Nếu bạn muốn lời khuyên của tôi, với thông tin nhỏ mà tôi có, tôi sẽ giả sử rằng là cách hiện tại, vì vậy hãy quấn toàn bộ quy trình trong một số thử/bắt và xử lý ngoại lệ trong khối catch do đó, nó không bong bóng lên đến báo cáo lỗi cửa sổ. Sau đó gọi khởi động lại từ đó.

Chỉnh sửa: người đó có câu trả lời đầy đủ, nhưng tôi sẽ để lại điều này cho những người chơi. Tôi muốn lưu ý rằng ứng dụng trình bao bọc sẽ không bao giờ kiểm soát được sự cố của quá trình mà không cần báo cáo tắt báo cáo lỗi cửa sổ, vì vậy đây là một bước quan trọng trong quy trình.

2

Nhìn vào ProcessStartInfo.ErrorDialog = false;

0

Điều này dường như làm việc cho tôi:

System.Diagnostics.Process process = new System.Diagnostics.Process(); 
System.Diagnostics.ProcessStartInfo startinfo = new System.Diagnostics.ProcessStartInfo(); 
startinfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
startinfo.FileName = @"PATH TO EXE"; 
startinfo.Arguments = "Arg1 Arg2 Arg3"; 
startinfo.ErrorDialog = false; 
startinfo.RedirectStandardError = true; 
startinfo.UseShellExecute = false; 
process.StartInfo = startinfo;   
process.Start(); 
process.WaitForExit(); 
process.Kill(); 
Các vấn đề liên quan