2013-04-30 33 views
-2

我在C#中開發了一個應用程序。有沒有什麼辦法,如果用戶殺死了我的應用程序的任務管理器中的進程,那麼應用程序將自動重新啓動 我搜索了很多這種類型的事件,當進程從任務管理器手動終止時應該被觸發 感謝如何啓動我的C#應用​​程序再次如果用戶終止任務管理器的進程

+2

最後,如果用戶試圖努力不夠,他們將能夠殺死你的應用程序。你想達到什麼目的? Windows服務可能是一條需要考慮的路線。 – KingCronus 2013-04-30 10:09:25

+2

你確定這是明智的嗎?如果我正在運行一個應用程序,每次我殺死它時都會重新啓動,我會感到非常憤怒。 – 2013-04-30 10:09:42

+0

@PaulieWaulie Chrome通過大量的進程來實現這種竅門,如果任何一個失敗,似乎都會重啓對方...是的,這讓我很生氣。 – Oliver 2013-04-30 10:10:40

回答

5

如果用戶殺死你的進程 - 這是相當多了。你不會得到任何事件,什麼都沒有。

你需要做的是有一個第二個進程運行在監視第一,偶爾輪詢正在運行的進程,並重新開始在它停止該事件的第一個列表。或者,您可以讓他們使用IPC來偶爾做心跳檢查,以避免查看整個進程列表。

當然,如果用戶首先殺死監視器進程,那麼除非兩個進程都監視對方並啓動無論哪個丟失,否則你不會真正得到任何地方,但現在你只是繞着圈子走。

雖然一般來說,這是一個壞主意。如果用戶想要停止你的過程,你應該讓他們。你爲什麼要阻止他們?

+0

但是,如果我將開始另一個進程監視第一個,然後功能將被複制 – 2013-04-30 10:17:31

+0

有什麼方法來啓動同一個應用程序的兩個過程,但使用不同的名字,這樣我可以處理好這個問題 – 2013-04-30 10:19:33

+0

沒有必要啓動完全相同的流程兩次,只需編寫第二個小應用程序,其唯一目的是進行監控。 – PhonicUK 2013-04-30 10:24:08

2

唯一的解決辦法我看到的是另一種過程,手錶的主要過程和重新啓動它。我會在主進程中使用Mutex,並在監視進程中觀察該Mutex。釋放互斥意味着主進程被阻止。

/// <summary> 
/// Main Program. 
/// </summary> 
class Program 
{ 
    static void Main(string[] args) 
    { 
     // Create a Mutex which so the watcher Process 
     using (var StartStopHandle = new Mutex(true, "MyApplication.exe")) 
     { 
      // Start the Watch process here. 
      Process.Start("MyWatchApplication.exe");     

      // Your Program Code... 
     } 
    } 
} 

在鐘錶工藝:

/// <summary> 
/// Watching Process to restart the application. 
/// </summary> 
class Programm 
{ 
    static void Main(string[] args) 
    { 
     // Create a Mutex which so the watcher Process 
     using (var StartStopHandle = new Mutex(true, "MyApplication.exe")) 
     { 
      // Try to get Mutex ownership. 
      if (StartStopHandle.WaitOne()) 
      { 
       // Start the Watch process here 
       Process.Start("MyApplication.exe"); 

       // Quit after starting the Application. 
      } 
     } 
    } 
} 
+0

親愛的你請詳細說明這段代碼 – 2013-04-30 10:27:59

+0

爲了清晰起見,我添加了更多的代碼。作爲一個側面說明,這只是一個例子,並不是一個非常穩固的解決方案。 – Mecaveli 2013-04-30 12:06:21

相關問題