-1

我用 C# 开发了一个应用程序。有什么方法可以让用户在任务管理器中杀死我的应用程序的进程,然后应用程序将自动重新启动

4

2 回答 2

5

如果用户杀死了您的进程 - 差不多就是这样。你不会得到任何事件,什么都没有。

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

当然,如果用户首先终止了监视进程,那么除非两个进程相互监视并启动缺少的进程,否则您将无法真正到达任何地方,但是现在您只是在绕圈子。

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

于 2013-04-30T10:10:48.490 回答
3

我看到的唯一解决方案是另一个监视主进程并重新启动它的进程。我会在主要进程中使用互斥锁,并在监视进程中监视该互斥锁。Released 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.
            }
        }
    }
}
于 2013-04-30T10:15:48.607 回答