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