2012-02-18 45 views
6

Làm cách nào tôi có thể bắt đầu chương trình của mình tự động nếu nó bị treo trên máy chủ Windows 2003? Đôi khi chương trình của tôi chỉ bị treo, có cách nào trong các cửa sổ hoặc cài đặt mà tôi có thể đặt không?Làm thế nào để khởi động lại chương trình tự động nếu nó bị treo trong Windows?

+1

Loại chương trình nào? Dịch vụ cửa sổ hoặc ứng dụng thông thường? –

+0

Hmm, "đôi khi chương trình của tôi chỉ bị treo". Có vẻ như một cách tiếp cận tốt hơn sẽ là tìm ra lý do tại sao chương trình bị treo và sửa lỗi đó. Band-aids là tuyệt vời vì cơ thể là tự chữa bệnh. Không phải như vậy với các chương trình của bạn. –

+0

Tất nhiên bạn muốn làm cho chương trình của bạn bị lỗi. Đó là một lý tưởng tuyệt vời để phấn đấu. Nhưng ngay cả những chương trình mạnh mẽ nhất cũng có thể gặp sự cố. Nếu bạn đang ở trong một môi trường máy chủ, nó có thể làm cho rất nhiều ý nghĩa để khởi động lại khi một vụ tai nạn xảy ra. Bạn vẫn có thể đăng nhập các sự cố và cố gắng loại bỏ chúng, nhưng người dùng của bạn sẽ hạnh phúc hơn nhiều nếu không có thời gian ngừng hoạt động kéo dài cho mọi sự cố. – aggieNick02

Trả lời

7

Cách tiếp cận thông thường là chạy cái được gọi là quy trình người giám hộ. Đây là một quá trình riêng biệt, thường là một dịch vụ, theo dõi trạng thái của quá trình chính. Khi người giám hộ phát hiện ra rằng dịch vụ chính đã chết, nó tái sinh nó.

Theo hiểu biết tốt nhất của tôi, không có chức năng Windows được cài đặt cho bạn.

+2

Tính năng tích hợp cho dịch vụ, tab Khôi phục. –

+2

Tôi thà tưởng tượng rằng việc sử dụng từ "chương trình" ngụ ý rằng câu hỏi liên quan đến một chương trình máy tính để bàn. –

+0

Nah, một dịch vụ là một exe máu thật sự. Chỉ cần một vài quy ước để giữ cho người dùng kiểm soát. –

1

Rất tiếc, không có cài đặt nào trong Windows để tự động khởi động lại chương trình thông thường khi chương trình gặp sự cố.

Bạn có cần chủ động tương tác với GUI của ứng dụng không? Một số trong số Service Wrappers (được thiết kế để chạy bất kỳ ứng dụng nào dưới dạng Dịch vụ Windows) sẽ giám sát ứng dụng của bạn và khởi động lại khi nó không thành công, nhưng hãy chắc chắn điều tra Session 0 Isolation để đảm bảo rằng nó sẽ không bị cản trở.

1

Bạn có thể sử dụng một số ứng dụng đặc biệt như BDV SystemEvents hoặc bất kỳ ứng dụng nào khác. Nó cho phép bạn chỉ định ứng dụng sẽ được khởi động nếu một ứng dụng nào khác được đóng lại. Chỉ định cùng một ứng dụng như một Điều kiện và là một Hành động và bạn sẽ nhận được kết quả mong đợi.

3

Lưu ý: chạy các tệp bat tự lặp có thể hữu ích, nhưng trừ khi bạn biết bạn đang làm gì, chúng có thể làm hỏng tất cả các loại tàn phá. Điều này đặc biệt nếu bạn chạy chúng khi khởi động. Bạn đa được cảnh bao.

Dù sao đi nữa. Tôi chỉ nhớ điều gì đó từ 286 ngày của tôi, khi tôi chơi xung quanh rất nhiều với các tập tin BAT. Nếu bạn viết tệp

yourprogram.exe 
some other event 

tệp BAT sẽ chạy chương trình của bạn, sau đó tạm dừng và đợi trong nền cho đến khi chương trình thoát. Sau đó nó sẽ chạy "một số sự kiện khác". Điều này thường rất phiền phức nếu bạn muốn chạy nhiều thứ cùng một lúc, nhưng ở đây nó thực sự hữu ích. Sử dụng điều này, nó có thể làm cho nó chạy một vòng lặp khởi động lại chương trình (và chạy lại tập tin bat) ngay khi nó thoát. Kết hợp điều này với https://superuser.com/questions/62525/run-a-completly-hidden-batch-file và bạn sẽ không bao giờ thấy nó xảy ra.

Các tập tin BAT cuối cùng ("restart.bat" trong ví dụ này) sẽ giống như thế:

c:\[location]\yourprogram.exe 
wscript "C:\[location]\invisible.vbs" "C:\[location]\restart.bat" 

Đó là về nó. Bắt đầu chương trình (khi khởi động qua tác vụ hoặc thậm chí chỉ thư mục khởi động) với dòng 2 và điều này cần giải quyết vấn đề của bạn :)

Ồ, nếu bạn muốn dừng vòng lặp, chỉ cần đổi tên tệp bat hoặc đặt "//"ở phía trước của hai dòng, lưu nó và thoát khỏi chương trình.

Nếu chương trình bạn đang chạy yêu cầu quyền quản trị, giải pháp mà tôi tìm thấy đã sử dụng psexec (http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx) để chạy cả chương trình và dơi với đặc quyền nâng cao. Trong trường hợp đó, BAT sẽ trông giống như:

c:\[location]\psexec -h c:\[location]\yourprogram.exe 
c:\[location]\psexec -h wscript "C:\[location]\invisible.vbs" "C:\[location]\restart.bat" 

Sau đó, bạn chạy dơi as administrator, hoặc chạy dòng thứ hai (không có phần psexec) từ task scheduler với quyền cao.BEWARE: chạy nó như một người dùng bình thường và nhấp vào "không" trên dấu nhắc UAC đã cho tôi một BSOD, có lẽ vì nó looped "không thể chạy chương trình vì thiếu đặc quyền" một vài tỷ lần hoặc một cái gì đó :)

+1

Khái niệm đẹp. Bạn thậm chí có thể tránh một tập tin batch và invisible.vbs, và làm điều đó trong một VBScript thay vì ví dụ: 'Giữ cho máy tính mở Đặt objShell = WScript.CreateObject ("WScript.Shell") ObjShell.run "calc.exe", 1, đúng ObjShell.run (Wscript.ScriptFullName) – Jimadine

1

Tôi đang tìm kiếm một cái gì đó tương tự. Có hai tùy chọn để xử lý việc này - bạn có thể tự viết một tập lệnh nhỏ hoặc sử dụng một cái gì đó đã có sẵn.

Sau một số googling, tôi đã xem qua số này list. Blogger đã biên soạn khoảng 8 công cụ để tự động khởi động lại ứng dụng bị đóng hoặc bị đóng.

1

Bạn có thể sử dụng RegisterApplicationRestart.

"Nếu bạn đăng ký khởi động lại và việc áp dụng gặp phải một ngoại lệ unhandled hoặc là không đáp ứng, người dùng sẽ được cung cấp các cơ hội để khởi động lại ứng dụng; ứng dụng không phải là tự động khởi động lại mà không có sự đồng ý của người dùng. "

Để tự động khởi động lại mà không cần sự can thiệp của người dùng, cũng có RestartOnCrash. Làm việc với tất cả các phiên bản Windows.

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