2009-07-27 14 views
3

Lorsqu'un assembly .NET est déployé sur le GAC et que le fichier de destination est verrouillé, Windows le conserve dans une sorte de 'purgatoire d'assembly' - c:\windows\assembly\temp.Que se passe-t-il dans le 'purgatoire d'assemblage'?

En utilisant Process Explorer ceux-ci peuvent être facilement visibles lors de la recherche de la DLL suspect:

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

Dès que je finis le processus de verrouillage du fichier (dans ce cas Owstimer.exe), il est par magie déployée au GAC correctement.

Je suis curieux de savoir ce que Windows est en train de faire ici. Comment sait-il quand le verrou de fichier a été libéré? Où conserve-t-il l'enregistrement des fichiers verrouillés? Est-ce qu'il abandonne jamais?

Répondre

1

Temp et tmp sont des dossiers temporaires utilisés lors de l'installation et de la désinstallation de l'assembly GAC. Tmp est utilisé pour l'installation et Temp est utilisé pour la désinstallation. Source: GAC Temp and Tmp

.NET Runtime Optimization Service (mscorsvw.exe) est probablement sondait les fichiers une fois dans un certain temps pour vérifier si elles sont fermées de sorte qu'il peut [un] installer des ensembles en attente.

Je peux me tromper, mais pour autant que je sache, il n'y a pas de WinAPI qui vous informerait que certains fichiers ont été fermés/déverrouillés. Vous devez les surveiller par vous-même. Mais Windows lui-même doit avoir une telle liste quelque part en mémoire (au moins il a une liste de handles ouverts), donc il sait juste que le fichier est fermé, parce que le handle représentant le fichier est libéré.