1分鐘解救 run 不出來的 Autoruns

緣起

今天,被某些開機自動運行的程序「惹毛」了。打算使用 Autoruns 查看這個進程爲何會開機啓動。沒想到打開 Autoruns 後,只能在任務欄看到圖標,怎麼點都點出不來。Autoruns 已經啓動了,否則任務欄不會看到圖標,究竟是什麼緣由致使的呢?繼續閱讀前,請回憶下是否遇到過相似的狀況,有什麼思路嗎?工具

說明: 很早就寫了初稿,一直沒來得及編輯完善,直到週末才編輯完。code

捕獲事件

照例請出咱們的老朋友 —— process monitor。開始捕獲,而後打開 Autoruns,當任務欄出現 Autoruns 的圖標後,中止捕獲。經過 Tools -> Process Tree... (或者按 Ctrl + T)查找到 Autoruns,在其上面右鍵,Add Process to Include Filter,只顯示 Autoruns 相關的事件,準備進一步分析。cdn

add-autoruns-to-include-filter
add-autoruns-to-include-filter

沒想到!?竟然一篇空白,什麼都沒有了!blog

小意外

process-monitor-filter-empty
process-monitor-filter-empty

process monitor 確定捕獲了對應的事件,可是爲何什麼都沒有了呢?先檢查下過濾條件。進程

process-monitor-filter-autoruns-excluded-by-default
process-monitor-filter-autoruns-excluded-by-default

原來,process monitor 默認會過濾掉 Autoruns 相關的事件。關閉這條過濾規則,點擊 OK,關於 Autoruns 的事件都出來了。事件

autoruns-events-show-up
autoruns-events-show-up

分析

捕獲的事件有了,咱們就能夠繼續分析了。我猜想,Autoruns 應該把配置保存到了註冊表中,因此排除其它幾類事件,只保留註冊表相關事件。應該是成功讀取到了某些錯誤的設置,因此只保留 ReusltSuccess 並且 OperationRegQueryValue 的事件。(固然,這是個人猜想。還有多是沒讀取到某些關鍵設置,若是是沒讀取到,咱們應該把 Result 列是 Success 的排除掉。)it

通常狀況下,不少程序會把對應的設置保存到 HKCU 下,而不是 HKLM。由於寫入 HKLM 須要管理員權限,讀取不用。因此咱們還能夠排除 PathHKLM 開頭的記錄。io

作好過濾後,往下瀏覽下,發現了四個跟位置有關的參數。event

autoruns-position-registry-setting
autoruns-position-registry-setting

發現,其中的 ypos 的值很奇怪,刪除後從新啓動 Autoruns 便可正常顯示了。整個過程請參考下面的屏幕錄像。class

troubleshoot-autoruns-can-not-show-up-screen-record
troubleshoot-autoruns-can-not-show-up-screen-record

友情提示:

Autoruns 在關閉的時候會保存相關配置到註冊表,因此須要先關閉 Autoruns,再作修改操做。

回顧

在公司的時候,接過外接顯示器。應該是 Autoruns 上次退出的時候的位置正在外接顯示器,保存的位置是相對於外接顯示器的位置。本次啓動後,依然想在外接顯示器中顯示。可是,外接顯示器已經沒有了,因此不能正常顯示出來。make sense!

總結

  • Autoruns 會保存相關設置到註冊表中,對應的註冊表位置是 HKCU\Software\Sysinternals\AutoRuns
  • 猜測其它 Sysinternals 工具也會把設置保存到 HKCU\Software\Sysinternals\ 下面。
  • process monitor 默認會過濾一些事件,其中就包括 Autoruns 相關的事件。
  • process monitor 真的是排錯的神兵利器。可是必定要用好過濾才行。不然就是大海撈針!
相關文章
相關標籤/搜索