3

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

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

流程浏览器搜索
(来源:alexangas.com

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

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

4

1 回答 1

1

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

.NET 运行时优化服务mscorsvw.exe

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

于 2009-07-30T14:53:38.083 回答