我有一個用C#編寫的用於創建多個線程的Windows服務,某些線程具有遺留代碼,並且我沒有足夠的時間/訪問遺留代碼來等待所有這些線程在OnStop()完成之前停止。再次在某些時候,我沒有引用所有線程,因爲有遺留代碼。現在我想動態更新服務。所以我從我的工作服務開始一個不同的更新程序服務。更新程序服務將停止作業服務,下載作業服務exe和其他dll,將其替換爲舊的exe文件和dll,最後重新啓動作業服務。開始後,作業服務將停止更新程序服務。如何停止具有多個線程的Windows服務無法停止
現在,當Updater服務使用ServiceController.Stop()停止Job服務並調用ServiceController.WaitForStatus(ServiceControllerStatus.Stopped)時,Job服務停止,但從Job服務產生的一些遺留線程可能不會停止那一刻,並因此Job Service exe無法更新。
我真的沒有找到任何好的解決方案呢。最好的解決方案可能是使用WaitHandles(AutoResetEvent/ManualResetEvent)等待所有線程完成,這不會發生。或者可能是所有的線索都可能被強制中止,這似乎也很關鍵。另一個不希望的解決方案可能是找到服務進程中運行的所有線程,並終止/中止所有不直接的線程,也不是最好的解決方案。我希望在OnStop()中使用Environment.Exit,但發現它會導致Windows顯示一條錯誤的警報消息,說明進程意外終止(錯誤1067),我根本無法解決該問題。
現在我很困惑在短時間內應該做什麼而不觸摸遺留代碼。任何幫助將是可觀的。