Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果用户从任务管理器中终止进程,如何再次启动我的C#应用程序_C# - Fatal编程技术网

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

如果用户从任务管理器中终止进程,如何再次启动我的C#应用程序,c#,C#,我在C#中开发了一个应用程序。如果用户在任务管理器中终止了我的应用程序的进程,应用程序是否会自动重新启动 我搜索了很多这样的事件类型,当进程将从TaskManager手动终止时,应该触发这些事件 谢谢如果用户终止了您的进程,那就差不多了。你不会得到任何事件,什么都没有 您需要做的是运行第二个进程来监视第一个进程,偶尔轮询正在运行的进程列表,并在第一个进程停止时重新启动它。或者,您可以让他们使用IPC偶尔进行心跳,以避免查看整个流程列表 当然,如果用户先终止监视进程,那么除非两个进程互相监视并启动

我在C#中开发了一个应用程序。如果用户在任务管理器中终止了我的应用程序的进程,应用程序是否会自动重新启动 我搜索了很多这样的事件类型,当进程将从TaskManager手动终止时,应该触发这些事件
谢谢

如果用户终止了您的进程,那就差不多了。你不会得到任何事件,什么都没有

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

当然,如果用户先终止监视进程,那么除非两个进程互相监视并启动丢失的进程,否则就不会有任何进展,但现在你只是在兜圈子


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

我看到的唯一解决方案是另一个监视主进程并重新启动它的进程。我将在主进程中使用互斥体,并在监视进程中监视该互斥体。释放的互斥表示主进程已停止

/// <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...
        }
    }
}
//
///主程序。
/// 
班级计划
{
静态void Main(字符串[]参数)
{
//创建一个互斥锁,以便监视程序处理
使用(var StartStopHandle=new Mutex(true,“MyApplication.exe”))
{
//在这里开始观察过程。
Process.Start(“MyWatchApplication.exe”);
//你的程序代码。。。
}
}
}
在观察过程中:

/// <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.
            }
        }
    }
}
//
///监视重新启动应用程序的过程。
/// 
班级计划
{
静态void Main(字符串[]参数)
{
//创建一个互斥锁,以便监视程序处理
使用(var StartStopHandle=new Mutex(true,“MyApplication.exe”))
{
//尝试获取互斥对象的所有权。
if(StartStopHandle.WaitOne())
{ 
//从这里开始观察过程
Process.Start(“MyApplication.exe”);
//启动应用程序后退出。
}
}
}
}

最终,如果用户足够努力,他们将能够杀死您的应用程序。你想达到什么目标?Windows服务可能是一个需要考虑的路径。你确定这是明智的吗?如果我运行的应用程序每次关闭后都会重新启动,我会非常生气。@PaulieWaulie Chrome通过拥有许多进程来实现这种技巧,如果任何一个进程出现故障,这些进程似乎会彼此重新启动。。。是的,这让我很生气。我同意以上所有的观点,这听起来真的很烦人。但是,如果你想这样做,请查看windows服务-也就是说,据我所知,如果用户在Vista/7/8上,可能无法完全工作,但是当进程从任务管理器手动终止时,应该会触发此类事件。但是,如果我想启动另一个进程来监视第一个进程,那么功能将重复。是否有任何方法可以启动相同的两个进程应用程序,但名称不同,所以我可以处理这个问题,没有必要启动完全相同的过程两次,只需编写第二个小应用程序,其唯一目的是做监测。亲爱的,我希望这只在一个单一的应用程序。请告诉我,是否有任何方法可以启动同一应用程序的两个进程,但使用不同的名称?这并不是一种明智的方法。你可以让进程将自己复制到另一个具有不同名称的文件中,然后启动该文件,但这样会有两个单独的文件。亲爱的,请详细说明这段代码。为了清晰起见,我添加了更多代码。作为旁注,这只是一个示例,不是一个非常可靠的解决方案。