2009-12-06 172 views
0

有沒有什麼辦法可以像Windows窗體中的Application.Restart()一樣從同一服務重新啓動Windows服務,我不想從服務啓動另一個進程來重新啓動服務。從服務重新啓動Windows服務

+1

已經在這裏解答:http://stackoverflow.com/questions/220382/how-can-a-windows-service-programmatically-restart-itself – bobbymcr 2009-12-06 17:32:33

回答

1

我是一個名爲Daemoniq的開源Windows服務託管框架的開發人員。 Setting service recovery options是它的一個特點。您可以從http://daemoniq.org

當前功能下載包括:通過的app.config

  • 運行通過CommonServiceLocator
  • 設置常用的服務像服務名,顯示名,描述和serviceStartMode性能

    • 容器無關的服務位置通過的app.config
    • 組服務
    • 一套恢復選項在同一進程的多個窗口服務通過命令行通過命令行
    • 安裝,卸載,調試服務通過的app.config
    • 一套服務流程憑據依靠

    謝謝!

  • 0

    您還可以在安裝項目中將Custom Action添加到Custom Actions的Commit文件夾中。它必須是具有[RunInstaller(true)]屬性的從System.Configuration.Install.Installer繼承的類的類庫項目的主輸出。在這個類,你需要重寫一個基本方法:

    public override void Commit(IDictionary savedState) 
        { 
         base.Commit(savedState); 
         ProcessStartInfo psi = new ProcessStartInfo("sc", "failure \"You service name\" reset= 60 actions= restart/1000"); 
         psi.CreateNoWindow = true; 
         Process proc = Process.Start(psi); 
         proc.WaitForExit(); 
        } 
    

    它的配置爲您服務,失敗後重新啓動automaticaly。

    比當你需要重新啓動你的服務,你可以做

    Environment.FailFast("Self restarting service..."); 
    

    但它有一個缺點 - 它會被解僱的事件日誌中的錯誤消息。