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

What is the best way to block system shutdown in an application

本文关键字:最佳 方法 是什么 系统 应用程序      更新时间:2023-10-16

我对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.)有更好的方法吗。我基本上需要这个应用程序不允许关闭,除非它是通过按下电源按钮强制关闭的。

你不能像那样无限期地阻止系统关闭。参见HandlerEx回调函数的备注:

SERVICE_CONTROL_SHUTDOWN控制代码只能由在关闭期间必须完全清理的服务,因为是可用于服务关闭的有限时间(约20秒)。在此时间到期后,无论服务关闭是否完成

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

与其从代码中执行,不如部署几个组策略,如下所述:http://www.sevenforums.com/tutorials/128920-shut-down-computer-allow-prevent-users-groups.html

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

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

它可以使用WinExec ()CreateProcess ()来容易地实现。