從 Windows 7 開始,您可以使用 GFlags 中的 [ 無訊息進程結束 ] 索引標籤,輸入您要監視無訊息結束的進程名稱。
在此監視功能的內容中,我們使用 無訊息結束 一詞來表示受監視的進程會以下列其中一種方式終止。
自我終止
受監視的進程會藉由呼叫 ExitProcess 來終止本身。
跨進程終止
第二個進程會呼叫 TerminateProcess 來終止受監視的進程。
監視功能不會偵測到進程最後一個線程結束時發生的一般進程終止。 監視功能不會偵測由內核模式程式代碼起始的進程終止。
若要註冊無訊息結束監視的程式,請開啟 GFlags 中的 [ 無訊息進程結束 ] 索引標籤。 輸入行程名稱作為 影像 ,然後按 Tab 鍵。 核取 [ 啟用無訊息進程結束監視] 方塊,然後選取 [ 套用]。 這會在下列登錄項目中設定FLG_MONITOR_SILENT_PROCESS_EXIT旗標。
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ProcessName\GlobalFlag
如需此旗標的詳細資訊,請參閱 啟用無訊息進程結束監視。
如需有關在 GFlags 中使用 靜默進程結束 標籤的詳細資訊,請參閱 設定靜默進程結束監視。
在 GFlags 的 [ 無訊息進程結束 ] 索引標籤中,您可以設定當受監視的進程以無訊息方式結束時所發生的動作。 您可以設定通知、事件記錄,以及建立轉儲檔案。 您可以指定偵測到靜默退出時啟動的程序,並且您可以指定監視將忽略的模組清單。 這些設定中有數個可供全域和個別應用程式使用。 全域設定會套用至您註冊進行靜默退出監控的所有進程。 應用程式設定會套用至個別進程並覆寫全域設定。
全域設定儲存在登錄的以下機碼中。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit
應用程式設定會儲存在註冊表的下列機碼下。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\ProcessName
報告模式
[報告模式] 設定可作為應用程式設定,但無法做為全域設定。 您可以使用下列複選框來設定報告模式。
啟動監視程式啟用傾印收集啟用通知ReportingMode 登錄專案是下列旗標的位元邏輯或運算。
旗標 | 價值 | 意義 |
---|---|---|
啟動監控進程 | 0x1 | 當偵測到靜默退出時,將啟動在 [監視行程] 欄中指定的監視行程。 |
本地轉存 | 0x2 | 偵測到靜默退出時,會為受監視的程序建立傾印檔案。 在跨進程終止的情況下,也會為導致終止的進程建立傾印檔案。 |
通知 | 0x4 | 當偵測到靜默退出時,會顯示彈出通知。 |
忽略自身退出
忽略自行退出 設定可作為應用程式設定,但無法作為全域設定。 您可以使用 [ 忽略自身退出 ] 複選框來指定是否忽略自身退出。
IgnoreSelfExits 登錄項目具有下列其中一個值。
價值 | 意義 |
---|---|
0x0 | 偵測並回應自我終止和跨進程終止。 |
0x1 | 忽略自我終止。 偵測並回應跨進程終止。 |
監視進程
您可以在 [監視行程] 文字框中輸入行程名稱以及命令行參數,以指定 監視進程 。 您可以在命令列中使用下列變數。
Varaible | 意義 |
---|---|
%e | 退出進程的標識碼。 這是以無訊息方式結束的受監視進程。 |
%i | 起始進程的標識碼。 在自我終止的情況下,這與退出程序相同。 在跨進程終止的情況下,這是造成終止的進程標識符。 |
%t | 起始線程的標識碼。 這是造成中止的線程。 |
%c | 傳遞至 ExitThread 或 TerminateThread 的狀態代碼。 |
例如,監視程序的下列值指定在靜默結束時,啟動 WinDbg 並附加至結束的程序。
windbg -p %e
Monitor Process 命令行會儲存在 MonitorProcess 登錄專案中。
轉儲資料夾位置
您可以使用傾印資料夾位置文字框,指定當偵測到靜默退出時所寫入傾印檔案的位置。
您針對 Dump 資料夾位置 輸入的字串會儲存在 LocalDumpFolder 登錄專案中。
如果您未指定傾印資料夾位置,傾印檔案會寫入預設位置,也就是 %TEMP%\Silent Process Exit。
傾印資料夾大小
您可以使用 [傾印資料夾大小] 文字框來指定可寫入傾印資料夾的傾印檔案數目上限。 將此值輸入為十進位整數。
您針對 Dump 資料夾大小 輸入的值會儲存在 MaxNumberOfDumpFiles 登錄專案中。
根據預設,可以寫入的傾印檔案限製為10個。
傾印類型
您可以使用 傾印類型 下拉式清單來指定當偵測到無訊息退出時所寫入的傾印檔案類型(微型、小型、堆積或自定義)。
傾印類型會儲存在 DumpType 登錄項目中,這是 MINIDUMP_TYPE 列舉成員的位元運算 OR。 此列舉定義於 dbghelp.h 中,其包含在 Windows 套件的偵錯工具中。
例如,假設您選擇了 Micro 的傾印類型,您會看到 DumpType 登錄專案具有 0x88 的值。 下列兩個 MINIDUMP_TYPE 列舉值的位元運算 OR 結果是值 0x88。
MiniDumpFilterModulePaths:0x00000080
MiniDumpFilterMemory:0x00000008
如果您選擇 Custom 的傾印類型,請在 自定義傾印類型 方塊中輸入您自己的位運算 OR MINIDUMP_TYPE 列舉值。 將此值輸入為十進位整數。
模組忽略清單
您可以使用 [ 模組忽略清單 ] 方塊來指定偵測到無訊息結束時將忽略的模組清單。 如果受監視的進程由這個清單中的其中一個模組終止,則會忽略靜默退出。
您在 [ 模組忽略清單 ] 方塊中輸入的模組清單會儲存在 ModuleIgnoreList 登錄專案中。
讀取事件查看器中的進程結束報告
當受監視的進程沒有通知地結束時,監視器會在事件查看器中建立記錄。 若要開啟事件查看器,請輸入命令 eventvwr.msc。 導覽到 [Windows 日誌> 應用程式]。 尋找具有進程結束監視器來源的日誌項目。