如何防止用户关闭我的 C# 应用程序?

2024-02-20

如何用C#制作非封闭的应用程序?我想禁用表单的“X”按钮并防止 Windows 任务管理器关闭它。

我知道防止表单关闭的一种方法是处理FormClosing事件,但如何防止任务管理器关闭它?


不,无法阻止任务管理器关闭您的应用程序。任务管理器可以强制终止没有响应的进程;它不需要应用程序的许可来关闭它,而且它也没有很好地要求。 (看这个答案 https://stackoverflow.com/questions/10765197/what-is-the-difference-between-closing-an-application-and-ending-the-process-fro/10765274#10765274有关任务管理器的更多信息,以及关闭应用程序的不同方式之间的比较。)

唯一可以想到的解决方法是有两个进程,每个进程都配置为检测另一个进程何时关闭并启动一个新实例。当然,这仍然不会阻止其中一个进程被终止,它只会允许您重新启动它。这可能属于用户敌对行为的范畴。如果我求助于使用任务管理器来关闭您的应用程序,我可能希望它消失,无论您作为程序员的意图是什么。如果它不断启动新进程,我肯定会生气(我的病毒扫描程序也可能会生气,因为它以前见过这种行为)。

我建议您重新考虑应用程序的设计。如果您需要始终在后台运行的东西,您应该创建一个 Windows 服务。当然,服务没有用户界面,但您的应用程序似乎需要一个用户界面。因此,更好的是,防御性地编写代码:保存应用程序的状态,以便可以随意关闭和恢复它。无论如何,你都必须处理计算机关闭的情况,那么处理你的应用程序被关闭有多难呢?

正如微软的Raymond http://blogs.msdn.com/b/oldnewthing/archive/2010/07/21/10040699.aspx Chen http://blogs.msdn.com/b/oldnewthing/archive/2010/07/21/10040699.aspx会告诉您,Windows 没有相应的机制,因为没有人能够想象出一款像您的应用程序一样出色的应用程序,而没有用户愿意关闭。


As far as disabling your form's close box, the close icon in the system/window menu, and the Alt+F4 keystroke, this is relatively straightforward. You'll need to override your form's CreateParams property http://msdn.microsoft.com/en-us/library/system.windows.forms.form.createparams.aspx, and set the CS_NOCLOSE window class style http://msdn.microsoft.com/en-us/library/ff729176(v=VS.85).aspx:

protected override CreateParams CreateParams
{
   get
   {
      const int CS_NOCLOSE = 0x200;

      CreateParams cp = base.CreateParams;
      cp.ClassStyle |= CS_NOCLOSE;
      return cp;
   }
}

编译并运行。您将得到一个如下所示的表单(请注意标题栏上禁用的关闭按钮以及系统/窗口菜单中缺少“关闭”菜单项):

     Form with CS_NOCLOSE style

请注意,执行此操作时,您确实应该在应用程序界面中提供替代机制来关闭表单。例如,在显示此对话框的“主”表单上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何防止用户关闭我的 C# 应用程序? 的相关文章

  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver

随机推荐

  • GIT_MERGE_AUTOEDIT=默认为否

    在我的 git v 1 7 10 2 中 我必须在终端中执行以下操作 GIT MERGE AUTOEDIT no export GIT MERGE AUTOEDIT 所以 每次合并时 我都不会强制发布消息 我应该把它放在哪里 这样默认情况下
  • C++ 流作为成员变量

    我有一个 C 类 我想保存一个用于日志记录的流 在构造对象之后应该能够设置 并且可能重置 流 应该可以将流设置为std cout 或者作为记录到文件的文件流 或者作为字符串流 它只是忽略数据 a dev null各种各样的 无论如何 它应该
  • 如何创建更复杂的 Lucene 查询字符串?

    这个问题是从this https stackoverflow com questions 532365 how to get more out of lucene net问题 我的询问有两个方面 但因为两者都是相关的 所以我认为将它们放在一
  • 为什么 python 在 time.sleep() 之后不打印? [复制]

    这个问题在这里已经有答案了 我用 python 编程已经快两年了 当我看一些旧代码时 我发现了一件非常奇怪的事情 import random sys time try while True print str random randint
  • 在 ajax 请求完成之前,react.js 不会渲染

    我有一个非常简单的React js我需要制作一个组件isomorphic 在服务器上呈现 问题是组件仅在之后才呈现有用的信息ajax请求完成 如下所示 export default React createClass getInitialS
  • 将列表转换为 json 格式 - 快速且简单的方法

    假设我有一个如下所示的对象 MyObject public class MyObject int ObjectID get set string ObjectString get set 我有一个 MyObject 列表 我希望使用 str
  • 同一个表之间多对多的级联删除

    我正在尝试在 SQL Server 中的同一个表之间创建多对多关系 我有一张桌子Object有柱子ObjectId and Name 该关系遵循以下规则 一个孩子可以有多个父母 一个父母可以有很多孩子 ObjectA 可以是 Object
  • Bootstrap 模式 - 隐藏一个然后显示另一个

    我已经使用 jQueryUI 很长时间了 但最近出于美观原因切换到 Bootstrap 我现在正在努力解决我认为是一个简单的问题 并想知道其他更熟悉 Bootstrap 的人是否可以帮助我解决这个问题 我有一个用于动态创建对话框的通用函数
  • 恢复PDF中的图形状态后是否可以绘制路径的笔划?

    我在 PDF 中绘制线条 并希望以 1 1 以外的比例缩放 问题是我得到的笔划看起来像是用书法笔绘制的 在PDF中是否可以以某种方式调整路径大小 恢复图形状态 然后绘制上一个路径的笔划 这就是我在 PDF 中获得书法线条的方法 5 w wi
  • 具有 128 位键的基于时间的字典/哈希表,即超时字典中的值

    我需要制作一个基于时间的字典哈希表 其大小不会无限增长 我所说的 基于时间 具体是指 如果我要在 X 时间添加字典 我希望该项目在 X Y 时间不存在 Y 是超时时间 我愿意将时间存储在字典中或作为键或值的结构 CONTEXT 我收到我们正
  • R:获取给定函数内所有变量和函数的列表和环境(用于并行处理)

    我使用 foreach 进行并行处理 这需要通过列表手动将函数传递到寻址核心的环境 我想自动化这个过程并涵盖所有用例 对于仅使用封闭变量的简单函数来说很容易 然而 一旦要并行处理的函数使用在另一个环境中定义的参数和变量 就会出现问题 考虑以
  • 为什么 IE9 需要元标记来渲染圆角?

    在刚刚发布的IE9中 需要提供meta标签允许CSSborder radius渲染 Why 这个链接 http blogs msdn com b ie archive 2010 06 16 ie s compatibility featur
  • Java process.getInputStream() 没有任何内容可读取,子进程死锁

    我在某些进程包装方面遇到问题 并且该问题仅发生在 Windows XP 中 这段代码在 Windows 7 中完美运行 我真的很困惑为什么 XP 中的流是空的 我也尝试过使用 Process Exec 的 String 版本 但没有什么区别
  • 如何为 PDF 数据指定一个文件名,以便用户在 Swift 中保存

    我将我的 pdfData 交给用户保存 他可以保存到文件并制作文件 但pdf文件的默认名称是 PDF document pdf 如果可能的话 我想要我自己的文件名 也许我可以在将 pdfData 提供给之前更改 pdfData 中的文件名U
  • jquery 代码没有运行

    我想在单击后更改 div1 的颜色 当我点击时div1它必须将其背景颜色更改为 4A6B4C但这并没有发生 请帮忙 谢谢 document ready function div1 click function div1 toggleClas
  • 在 Eclipse 中显示日语字符时出现问题

    我的 Eclipse IDE 显示垃圾字符而不是正确的日语字符 尝试了很多策略 我的编码设置为UTF 8 但仍然没有结果 附上参考截图 任何帮助都会被接受 提前致谢 在您的工作区目录中打开此文件
  • Node js 中的 Values 文件上传器 - 多个文件上传

    我在用着值 ajax 文件上传器 http valums com ajax upload 我的nodejs服务器端如下所示 fileStream fs createWriteStream dirname public images hous
  • 为 Scala 枚举导出 Cats 顺序

    我想要一只普通的猫Order对于斯卡拉的Enumeration 我试过 implicit def enumOrder E lt Enumeration V lt E Value cats Order V new cats Order V d
  • 在discord.py中调用on_member_update时如何访问member?

    我正在尝试创建一个不和谐的机器人 一旦成员离线 不可见 该机器人就会为该成员添加特定的角色 这是我的代码 bot event async def on member update before after if str before sta
  • 如何防止用户关闭我的 C# 应用程序?

    如何用C 制作非封闭的应用程序 我想禁用表单的 X 按钮并防止 Windows 任务管理器关闭它 我知道防止表单关闭的一种方法是处理FormClosing事件 但如何防止任务管理器关闭它 不 无法阻止任务管理器关闭您的应用程序 任务管理器可