Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.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#_.net_Winforms_Formclosing - Fatal编程技术网

C# 不允许窗体以任何方式关闭

C# 不允许窗体以任何方式关闭,c#,.net,winforms,formclosing,C#,.net,Winforms,Formclosing,我知道我可以取消用户在windows窗体中单击x按钮的事件,但我希望这样做,以便任务管理器无法关闭它。我还没有在网上找到这一点,但我相信有办法做到这一点 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if(e.CloseReason == CloseReason.TaskManagerClosing) { e.Cancel = true; } } 这里有两

我知道我可以取消用户在windows窗体中单击x按钮的事件,但我希望这样做,以便任务管理器无法关闭它。我还没有在网上找到这一点,但我相信有办法做到这一点

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if(e.CloseReason == CloseReason.TaskManagerClosing)
    {
        e.Cancel = true;

    }
}

这里有两种情况:

  • 您可以通过从“流程”选项卡执行“结束流程”来终止应用程序。在这种情况下,你什么都不能做

  • 您可以从“应用程序”选项卡执行“结束任务”。您可以通过处理主窗体的关闭事件并编写以下代码来拦截此消息。你可以阅读更多关于亲密原因的内容

  • 不过,如果您想确保用户不能停止应用程序的运行,您应该创建一个单独的应用程序来监视您的应用程序。无论何时它被终止,应用程序都会再次运行它。您可以通过以下代码检查应用程序是否正在运行,并在每
    10s
    或任何所需间隔后通过计时器调用此代码

    private bool IsProcessRunning(string name)
    {
         foreach (Process p in Process.GetProcesses())
         {
                if (p.ProcessName.Contains(name))
                {
                    return true;
                }
          }
          return false;
     }
    

    你为什么要这么做?这是任务管理器的基本功能。如果你能描述一下你想要实现的目标,也许可以提出一个替代方案。我想你是在为一个信息亭或类似的东西写一个实用程序,在那里你不希望普通用户弄乱系统?对于类似的情况,只需将用户作为来宾登录即可。任务管理器首先会很好地询问。你阻止它。然后它切换到谋杀模式。并使用TerminateProcess()终止进程。你不能停止。用户总是赢。“我相信有办法做到。”我相信你错了。无法阻止用户关闭您的应用程序。你可以让它变得更困难,但最终用户可能会杀死你的应用。我不知道如何实现?如果(e.CloseReason==CloseReason.TaskManager关闭){e.Cancel=true;}仍然无法实现,我已经尝试过了,我已经更新了我的answer@jister你在哪里结束你的表格?进程选项卡还是应用程序选项卡?不,你不明白我的意思。他们可以更频繁地投票,但这会严重影响他们的表现,所以我可能一次只杀一个。或者我可以编写一个脚本来同时终止这两个进程。或者我可以按下红色的大开关,从USB启动,然后从硬盘上删除这两个程序。这是任何合理的用户都应该对这样一个行为不端的程序所做的。
    private bool IsProcessRunning(string name)
    {
         foreach (Process p in Process.GetProcesses())
         {
                if (p.ProcessName.Contains(name))
                {
                    return true;
                }
          }
          return false;
     }