在应用程序中阻止系统关闭的最佳方法是什么

时间:2015-03-21 21:07:43

标签: c++ winapi

我是Windows API的新手。我正在试图弄清楚如何阻止系统关闭。我想出了SERVICE_CONTROL_PRESHUTDOWN。目前还不确定如何使用它,但我计划在HandlerEx以下的行中做一些事情:

DWORD WINAPI serviceHandler(DWORD dwControl, DWORD dwEventType, LPVOID lpEventData, LPVOID lpContext)
{
    switch (dwControl)
    {
    case SERVICE_CONTROL_PRESHUTDOWN:
        while (1)
            Sleep(1000);
    }
    return NO_ERROR;
}

但是A.)我不确定我是否正确阅读MSDN,并正确实现此serviceHandler,以及B.)是否有更好的方法可以做到这一点。我基本上需要这个应用程序不允许关闭,除非强行按住电源按钮。

3 个答案:

答案 0 :(得分:2)

您不能无限制地阻止系统关闭。请参阅HandlerEx回调函数的备注:

  

只应处理SERVICE_CONTROL_SHUTDOWN控制代码   在关机期间必须绝对清理的服务,因为那里   是一个有限的时间(约20秒)可用于服务关闭。   在此时间结束后,无论如何都会继续系统关闭   服务关闭是否完成

最多20秒后,Windows将终止您的服务并继续关机过程。

答案 1 :(得分:1)

您应该部署多个组策略,而不是从代码中执行此操作,如下所述:http://www.sevenforums.com/tutorials/128920-shut-down-computer-allow-prevent-users-groups.html

答案 2 :(得分:0)

服务关闭的时间有限。
20秒将帮助您阻止系统关闭。

PC将执行类似于shutdown -t 20 -s的操作,然后快速输入 Windows徽标 + R \ shutdown -a,以上命令将被取消。

可以使用WinExec ()CreateProcess ()轻松实现。