禁用任何退出软件的可能性

Disabling any possibility to exit a software?

本文关键字:可能性 软件 退出 任何      更新时间:2023-10-16

我正在C++中实现大学考试软件,我想防止任何人在它运行后关闭它。目的是防止用户复制软件、打印屏幕并保存它等目的!

我最初是想禁用ctrl-alt-delalt+F4alt+tab和其他键组合的方法,但显然遵循这种方法不是那么容易,特别是在windows xp之后的版本。

你认为有什么可行的方法可以解决我的问题?

当然,您应该采取所有正常的步骤,使您的应用程序拒绝自己关闭(也许除非提供密码),所以我们只讨论"我不希望允许任何人强行关闭它"的部分。

一个解决方案是让你的应用程序成为Windows shell。

另一个解决方案是设置计算机,使当前登录的用户没有关闭应用程序的权限。

最后的解决方案,这是一个肮脏的,没有官方支持的hack,你没有从我这里听到,是这样做的:

public static class Utility
{
    [DllImport("ntdll.dll", SetLastError = true)]
    private static extern void RtlSetProcessIsCritical(UInt32 v1, UInt32 v2, UInt32 v3);
    public static void BsodIfProcessEnds()
    {
        Process.EnterDebugMode();
        RtlSetProcessIsCritical(1, 0, 0);
    }
    public static void NoFireworksIfProcessEnds()
    {
        RtlSetProcessIsCritical(0, 0, 0);
    }
}

警告:BsodIfProcessEnds完全按照它在罐头上所说的做。

在机器上只给用户一个受限制的用户帐户,不要给他们终止应用程序的权限。

为你的其他限制做同样的事情,你甚至不需要写一个应用程序。

如果你想让用户以管理员的身份运行,你所要求的是不可能的。

您可以创建两个应用程序。一个是不断检查你的应用是否在运行如果它没有运行,那么启动它,这可能是一个服务(对于简单的用户来说很难发现)。

你也可以用NTFS权限做一些有趣的事情。例如,创建一个用户完全没有权限(甚至不能查看其内容)的上层目录,然后在该目录下创建一个用户具有读取权限的文件夹。除非用户知道一个好方法,否则他们很难找到你的应用。

但他仍然可以启动任务管理器,但可能有一个政策反对。说到这一点,你可以通过策略来限制他只允许运行你的应用程序,而不是任何其他应用程序(所以他不能复制它,或者使用PC做任何其他事情,而不是你的应用程序。