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

关于 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重新加载吗

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容