2013-04-30 34 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

相关问题