2009-07-27 44 views
3

當.NET程序集部署到GAC並且目標文件被鎖定時,Windows將它保留在我最可能猜測的某種「組裝煉獄」中 - c:\windows\assembly\temp'裝配煉獄'會發生什麼?

使用處理資源管理器爲可疑DLL搜索時這些可以很容易地看出:

Process Explorer Search http://alexangas.com/blog/wp-content/uploads/2009/07/peasmlist.png

當我結束該進程鎖定該文件(在這種情況下OWSTIMER.EXE)它被部署神奇正確地向GAC發送。

我很好奇Windows在這裏實際上在做什麼。它如何知道文件鎖定何時被釋放?它在哪裏保留鎖定文件的記錄?它有沒有放棄?

回答

1

Temptmp是在GAC程序集安裝和卸載過程中使用的臨時文件夾。 Tmp用於安裝,Temp用於卸載。 來源:GAC Temp and Tmp

.NET運行時優化服務(mscorsvw.exe)在一段時間可能是探測文件一次檢查,如果他們被關閉,因此它可以(聯合國)安裝掛起組件。

我可能是錯的,但據我所知,沒有WinAPI會通知您某個文件已被關閉/解鎖。你必須自己監視它們。但是Windows本身必須在內存中有一個這樣的列表(至少它有一個打開的句柄列表),所以它只知道該文件已關閉,因爲表示該文件的句柄已被釋放。