[Windows]查詢檔案或資料夾被誰抓住(WhoLockMe)

昨天客戶系統突然有支批次程式執行時發生刪除資料夾失敗,但因為營運環境不能安裝額外的工具程式來觀察,筆記兩個攻城師常用的工具可以調查被誰佔據了:

  • Windows內建的工具Resource Monitor
  • 需要額外下載的Windows工具Process Monitor。

 

營造鎖定的情境

為了營造客戶發生的情境,我們先在C:\Temp\下新增一個delete資料夾。

接著打開cmd,切到C:\Temp\delete目錄

ok,營造好資料夾被抓到的情境了,接著來寫一段C#程式來刪除資料夾

[TestMethod]
public void TestMethod1()
{
    //要移除的目錄名稱。
    //若要移除 path 中的目錄、子目錄和檔案,則為 true;否則為 false。
    System.IO.Directory.Delete(@"C:\Temp\delete", true);
}

執行測試

果然刪除資料夾失敗,錯誤訊息: 由於另一個處理序正在使用檔案,所以無法存取該檔案

 


查詢檔案或資料夾被誰抓住(Performance Monitor)

Windows鍵 + R 輸入 perfmon /res

打開資源監視器

CPU  > 關聯控制代碼 > 輸入資料夾路徑 C:\temp\delete > 按下搜尋

找到兇手了,是一個Process ID = 11628的cmd程式。

 


查詢檔案或資料夾被誰抓住(Process Monitor)

也可以透過technet連結下載process monitor來觀察!

process monitor是一個可以讓我們監控檔案和Registry存取的監控程式,這次我們來用監控檔案存取的功能。

 

1.下載好後,執行procmon.exe

2.Process Monitor本人

 

3.按下Ctrl + L 打開Process Monitor filter

 選Path > Contains > 條件C:\temp\delete > Add > OK

 

4.查詢結果:

也找到兇手了!Process id = 11628的cmd.exe

 

把之前登入的檔案總管關閉後,批次重新執行就順利過關了。

 


小結:

  • 記得遠端登入桌面(mstsc)後,記得要關閉檔案總管(Explorer)
  • 其他的檢查工具: Process Explorer、wholockme。

 

參考:

Process Monitor v3.31

Process Explorer