美文网首页
关于 Windows 上使用 TerminateProcess

关于 Windows 上使用 TerminateProcess

作者: l蓝色梦幻 | 来源:发表于2019-03-26 17:25 被阅读0次

关于 Windows 上使用 TerminateProcess 关闭 Explorer 后重启的问题

首先, TerminateProcess 函数没有特殊的用法, 无外乎以下处理:

    HANDLE bExitCode = OpenProcess(PROCESS_TERMINATE, FALSE, pid);
    if (NULL != bExitCode) {
        BOOL bFlag = TerminateProcess(bExitCode, 0);
        CloseHandle(bExitCode);
    }

但是这个时候, 如果我们关闭的是 Explorer 的时候, 会发现 Explorer 会被系统自动重新加载.

Explorer 简介

Explorer.EXE 作为 Windows Shell 的组件之一, 主要的用途包括有:

  • 显示桌面、任务栏
  • 提供图形化的文件操作方式(例如大家熟知的资源管理器)
  • ……

总而言之, 没有 Explorer.EXE 的 Windows 不是不能运作, 而是操作很不方便.

作为 Windows Shell 重要的一环, Explorer.EXE 的启动由注册表键值(Windows 2000/XP/Server 2003):

键:HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon

键名:Shell

默认键值:Explorer.EXE

或配置文件 system.ini 决定(Windows 98/ME):

[Boot]
Shell=Explorer.EXE

Kill Explorer

经过测试后我们发现, 使用 TaskManager, Process Explorer 等工具 Kill Explorer 的时候, Explorer 并没有自动重启. 而且这两个工具使用的都是 TerminateProcess() 函数. 但是我们使用它的时候就没有产生效果. 无论任务管理器还是 Process Explorer, 在传入第 2 个参数 uExitCode 的时候, 传入的值总是1.

这时候我们参考这里, 把uExitCode的值设置为1, 然后去结束 Explorer.EXE,这时候, Explorer 没有重启.

参考

Explorer进程被杀后会被Windows重新加载吗

相关文章

网友评论

      本文标题:关于 Windows 上使用 TerminateProcess

      本文链接:https://www.haomeiwen.com/subject/yajnvqtx.html