2015-08-17 30 views
-2

我有一個應用程序需要整天運行,但有時它會發出異常,然後應用程序崩潰。如果發生這種情況,連接到應用程序的設備無法完成其工作。調用main函數重新啓動應用程序

我需要做的是重新啓動應用程序,當我崩潰,但我不想讓另一個程序來做到這一點。

這是什麼就是什麼,我想我需要做的:

static void Main(string[] args) 
    { 
     try 
     { 
      if (!Environment.UserInteractive) 
      { 
       ServiceBase.Run(new WebDaemonService(HttpClass.StartListening)); 
      } 
      else 
      { 
       HttpClass.StartListening(); 
      } 
     } 
     catch(Exception ex) 
     { 
      Restart(); 
     }    
    } 

但我怎麼做一個重啓功能,我只需再次調用主類還是需要到別的做一些事情。

如果嘗試其他方法是檢查應用程序是否需要作爲Windows服務或作爲應用程序啓動。

有人可以向我解釋我如何可以重新啓動功能?

+1

你應該嘗試處理/固定異常,而不是......捕捉異常爲你的計劃的一部分流不做事 – Sayse

+0

我@SayseHow可以到一個偉大的方式所以應用程序將再次運行 –

+0

我不知道,你沒有說什麼異常*是* – Sayse

回答

0

在當前域的ProcessExit事件上添加一個事件處理程序。

AppDomain.CurrentDomain.ProcessExit 

See doc at MSDN

重新啓動您有應用程序或服務。如果這是Windows服務,您可以將其設置爲在Services.msc窗口中的崩潰時重新啓動。

代碼示例:

class Foo 
{ 
    static void Main(string[] args) 
    { 
     AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit); 
     // Do your stuffs 
    } 

    static void CurrentDomain_ProcessExit(object sender, EventArgs e) 
    { 
     Process p = new Process(); 
     p.StartInfo.FileName = "Full path of exe"; 
     p.StartInfo.Arguments = "arguments"; 
     p.Start(); 
    } 
} 
+0

是的,我明白,但我怎樣才能開始我的應用程序,我需要在哪裏做到這一點? –

+0

添加代碼示例 –

+0

因此'AppDomain.CurrentDomain.ProcessExit + = new EventHandler(CurrentDomain_ProcessExit); '會在我的代碼之上?我已經擁有了? –