由于您无法使用操作系统安全性来防止这种情况,因此技术上的答案是无法完成.这只留下了解决方法或替代方法.
一个没有得到官方支持的解决方法,依赖于未记录的功能,而您没有收到我的回复是:
public static class Unkillable
{
[DllImport("ntdll.dll", SetLastError = true)]
private static extern void RtlSetProcessIsCritical(UInt32 v1, UInt32 v2, UInt32 v3);
public static void MakeProcessUnkillable()
{
Process.EnterDebugMode();
RtlSetProcessIsCritical(1, 0, 0);
}
public static void MakeProcessKillable()
{
RtlSetProcessIsCritical(0, 0, 0);
}
}
Run Code Online (Sandbox Code Playgroud)
在你打电话之后Unkillable.MakeProcessUnkillable,杀死这个过程会立即导致BSOD.这是一个非常难看的解决方案,但很难反驳"可以在2分钟内实施".
另一种解决方法是创建一组进程,通过在每个人死亡时重新启动来进行协作.
我最终使用了替代的 RunAs 程序CPAU,在登录时以管理员身份启动该进程。这样做,学生至少不能使用任务管理器或类似工具那么容易地杀死它。
稍后我也可能会实现乔恩建议的方法。这样,即使学生以某种方式设法终止该进程,他们也不会成功。
| 归档时间: |
|
| 查看次数: |
5187 次 |
| 最近记录: |