Вопрос

Когда сборка .NET развертывается в GAC и целевой файл блокируется, Windows удерживает ее в, как я могу предположить, своего рода «чистилище сборок» — c:\windows\assembly\temp.

Используя Process Explorer, их можно легко увидеть при поиске подозрительной DLL:

Process Explorer Search
(источник: alexangas.com)

Как только я завершаю процесс блокировки файла (в данном случае OWSTIMER.EXE), он волшебным образом правильно развертывается в GAC.

Мне любопытно, что на самом деле здесь делает Windows.Как он узнает, что блокировка файла снята?Где он хранит записи заблокированных файлов?Оно когда-нибудь сдается?

Это было полезно?

Решение

Temp и tmp — это временные папки, используемые во время установки и удаления сборки GAC. Tmp используется для установки и Temp используется для удаления.Источник: Температура GAC и Tmp

Служба оптимизации среды выполнения .NET (mscorsvw.exe), вероятно, время от времени проверяет файлы, чтобы проверить, закрыты ли они, чтобы можно было [удалить] установить ожидающие сборки.

Возможно, я ошибаюсь, но, насколько мне известно, не существует WinAPI, который бы уведомлял вас о закрытии/разблокировке определенного файла.Вы должны следить за ними самостоятельно.Но сама Windows должна иметь такой список где-то в памяти (по крайней мере, у нее есть список открытых дескрипторов), поэтому она просто знает, что файл закрыт, потому что дескриптор, представляющий файл, освобождается.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top