“装配炼狱”会发生什么?

时间:2009-07-27 15:14:48

标签: .net windows assemblies gac file-locking

当.NET程序集部署到GAC并且目标文件被锁定时,Windows会将其保存在我最能猜测的某种“汇编炼狱” - c:\windows\assembly\temp

使用Process Explorer时,在搜索可疑DLL时很容易看到这些:

Process Explorer Search
(来源:alexangas.com

一旦我结束锁定文件的进程(在本例中为OWSTIMER.EXE),它就会被神奇地正确地部署到GAC。

我很好奇Windows在这里做了什么。它如何知道文件锁何时被释放?它在哪里保存锁定文件的记录?它会不会放弃?

1 个答案:

答案 0 :(得分:1)

Temptmp是GAC程序集安装和卸载期间使用的临时文件夹。 Tmp用于安装,Temp用于卸载。 资料来源:GAC Temp and Tmp

.NET运行时优化服务(mscorsvw.exe)可能偶尔会探测文件以检查它们是否已关闭,以便[un]安装待处理的程序集。

我可能错了,但据我所知,没有WinAPI可以通知您某个文件已被关闭/解锁。你必须自己监控它们。但是Windows本身必须在内存中有这样的列表(至少它有一个打开句柄列表),所以它只知道该文件已关闭,因为代表该文件的句柄被释放。