我怎样才能让任务pipe理器杀死我的程序?

有没有办法保护我的Delphi应用程序不被Windows任务pipe理器(或其他像Process Explorer)杀死?

我认为Windows消息可以做到这一点(通过做一个钩子和拦截TerminateProcess消息)。

我想要一个这样的保护的例子。 卡巴斯基反病毒软件套件就是这样的; 我们不能在任务pipe理器中结束他们的进程

Solutions Collecting From Web of "我怎样才能让任务pipe理器杀死我的程序?"

像卡巴斯基AV程序可能使用驱动程序,并使用挂钩,以防止终止。 在你的情况下,我会建议在进程上设置一个ACL,这可以防止任务管理器或cmdline工具(如果用户没有调试权限)终止。 当然,用户总是可以使用像Process Explorer这样的工具,获取进程的所有权,设置新的ACL和终止。

如果用户不是管理员,则只需在不同的用户上下文中运行该流程即可(例如,从服务中启动)。

如本示例所示,使用Jedi Windows安全库来设置进程ACL非常简单。

正如Kornel所说,用户隔离进程的操作系统级保护。 但是一般来说,没有办法阻止你的进程被允许这样做的用户终止。 并且用户有权终止作为该用户运行的进程。

即使您想将其作为SYSTEM运行,也无法使用此过程与登录的用户进行交互。 你需要运行它作为一个服务,它将没有GUI。 您可以尝试其他方法,例如将一个DLL加载到像Explorer.exe这样的进程中,用户不会因为不想终止而终止,但这只是一种滥用。

如果开发人员可以编写无法终止的应用程序,那对最终用户来说就是一个非常糟糕的情况。 如果这是一个内部应用程序,你可以检查服务器故障,看看是否有某种方式来实现组策略。

这是一个非常糟糕的主意。 如果你的程序运行在别人的电脑上,那么这个程序就属于他们的财产,而不是你自己的财产,并且需要在家中作为一个客人行事。 这意味着你不会像你拥有这个地方一样行事,你也不会告诉电脑主人他不能用自己的财产做什么,比如杀掉他不想运行的任务。 如果你这样做,那么你的程序不会比恶意软件好,并可能被视为恶意软件。

我想你是在问一个错误的问题。

你试图解决“ 如果连接将在与服务器聊天中断 ”的问题以错误的方式解决。 答案不是拒绝进程终止 ”,而是“ 预见连接问题并编写错误后备代码 ”!

为什么? 原因,明显的是,连接终止可能是由于网络问题(你不能拒绝你的用户拔掉网络上的机器),而不是终止客户端!

为什么不能陷入TerminateProcess?

如果你担心应用程序崩溃 – 只需使用应用程序重新启动和恢复API 。

最简单的方法:你可以开始2个进程 ,让他们“看”对方。
如果其中一个关闭,让其他程序重新启动它。 它会阻止新手(如你所说)杀死那个进程。

对不起,但我认为你的“服务器/客户端应用程序”具有木马/后门的能力。 “ 客户端应用程序发送一些有用的数据 ”,“ unkillable进程 ”(在您的意见)似乎tooooo我怀疑。

创建一个NT服务项目,服务进程不能用进程管理器来终止,而是由内部服务管理器控制。