關(guān)于 Windows 上使用 TerminateProcess 關(guān)閉 Explorer 后重啟的問題

關(guān)于 Windows 上使用 TerminateProcess 關(guān)閉 Explorer 后重啟的問題

首先, TerminateProcess 函數(shù)沒有特殊的用法, 無外乎以下處理:

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

但是這個時候, 如果我們關(guān)閉的是 Explorer 的時候, 會發(fā)現(xiàn) Explorer 會被系統(tǒng)自動重新加載.

Explorer 簡介

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

  • 顯示桌面、任務(wù)欄
  • 提供圖形化的文件操作方式(例如大家熟知的資源管理器)
  • ……

總而言之, 沒有 Explorer.EXE 的 Windows 不是不能運作, 而是操作很不方便.

作為 Windows Shell 重要的一環(huán), 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

經(jīng)過測試后我們發(fā)現(xiàn), 使用 TaskManager, Process Explorer 等工具 Kill Explorer 的時候, Explorer 并沒有自動重啟. 而且這兩個工具使用的都是 TerminateProcess() 函數(shù). 但是我們使用它的時候就沒有產(chǎn)生效果. 無論任務(wù)管理器還是 Process Explorer, 在傳入第 2 個參數(shù) uExitCode 的時候, 傳入的值總是1.

這時候我們參考這里, 把uExitCode的值設(shè)置為1, 然后去結(jié)束 Explorer.EXE,這時候, Explorer 沒有重啟.

參考

Explorer進程被殺后會被Windows重新加載嗎

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容