2012-04-10 63 views
0

我有一個64位的Windows服務項目,現在我需要一個32位可執行文件,它應該具有與Windows服務相同的生命週期。由於64位應用程序域無法加載32位DLL,因此我必須在64位Windows服務的OnStart()函數內啓動此32位可執行文件。我想知道我應該如何保持這個32位可執行文件的生命週期?基本上我現在所做的是在OnStart()中啓動可執行文件並在OnStop()中退出它。Windows服務項目維護另一個可執行文件?

但我現在擔心的是,如果這32位可執行文件(進程)在運行Windows服務的過程中遇害或崩潰,該怎麼辦?我需要重新啓動它。在Windows服務中是否有地方或功能,我可以在其中監視其他進程,並且每當這些進程被殺死時,我可以重新啓動它們?或者我可以考慮嵌套的Windows服務,但是我找不到有關此主題的任何有用材料。

感謝您的幫助!

+0

所以你有一個服務,它依賴於一個應用程序?這是不好的設計......如果沒有用戶登錄會怎麼樣? – KingCronus 2012-04-10 10:00:53

+0

如果它們都是服務,則可以使用ServiceController來檢查另一個服務的狀態,甚至可以啓動/停止/重新啓動它。這是因爲所有的服務都將充當行政專家。 – KingCronus 2012-04-10 10:01:46

+0

@AdamKing感謝您的回覆。究竟爲什麼這是一個壞主意?我記得我讀了一些關於啓動一個可執行文件,即使沒有Windows登錄。而我的32位可執行文件不需要任何交互。但無論如何,這基本上是我自由決定32位進程是應用程序還是Windows服務。所以我也會檢查ServiceController。 – tete 2012-04-10 11:20:14

回答

1

我個人的做法是將兩個可執行文件都配置爲Windows服務,這樣您可以按照預期的方式使用ServiceController以確保您的程序正常運行。您還可以將一項服務設置爲另一項服務的先決條件。

我不會建議從服務啓動應用程序,因爲這個你會被打開了相當的困難......

例如,該用戶將應用程序是下運行?

沿着ServiceController路線走下去,讓兩部分都成爲服務肯定會成爲我的首選路線。

從設計角度來看,應該運行所有時間並且不需要接口的可執行文件應該確實是一個Windows服務,以便操作系統給出正確的調度並且能夠自動重新啓動該計劃應該有一個問題。

相關問題