如果用户从任务管理器中终止进程,如何再次启动我的C#应用​​程序

时间:2013-04-30 10:08:12

标签: c#

我用C#开发了一个应用程序。有没有办法,如果用户在我的应用程序的任务管理器中终止进程,那么应用程序将自动重新启动 我搜索了很多这样的事件,当从任务管理器手动杀死进程时应该触发这些事件 感谢

2 个答案:

答案 0 :(得分:5)

如果用户杀死了您的流程 - 那就是它。你没有得到任何事件,没有。

您需要做的是运行第二个进程监视第一个进程,偶尔轮询正在运行的进程列表,并在它停止的情况下重新启动第一个进程。或者,你可以让他们使用IPC来做偶尔的心跳,以避免查看整个过程列表。

当然,如果用户首先杀死了监控进程,那么除非两个进程互相监控并启动丢失的任何一个进程,否则你真的无法到达任何地方,但现在你只是绕圈子走了

一般来说,这是一个坏主意。如果用户想要停止您的流程,您应该让他们。你为什么要阻止他们?

答案 1 :(得分: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.
            }
        }
    }
}