我正在实施大学考试软件C++
,我想阻止任何人在它运行后关闭它。目的是为了防止用户复制软件、打印屏幕和保存等目的!
我最初在考虑一种禁用ctrl- alt- del、alt+ F4、alt+tab和其他组合键的方法,但显然遵循这种方法并不容易,尤其是在 windows xp 之后的版本中。
您认为解决我的问题的可行方法是什么?
你当然应该采取所有正常的步骤让你的应用程序拒绝自行关闭(也许除非提供密码),所以我们只是在谈论“我不想让任何人强行关闭它”部分.
一种解决方案是让您的应用程序成为 Windows shell。
另一种解决方案是设置计算机,使当前登录的用户无权关闭您的应用程序。
最后一个解决方案,这是一个肮脏的,没有官方支持的黑客,你没有听到我的消息,是这样做:
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 用于除您的应用程序之外的任何其他应用程序。