Comment faire en sorte qu'IIS 7 libère un fichier verrouillé ?

Lors de nos builds de production, un très gros fichier de contenu statique (10 mégaoctets) dans le répertoire racine est parfois verrouillé par IIS et ne peut pas être supprimé par la tâche de nettoyage. C’est probablement parce qu’il est activement servi à un ou plusieurs clients à ce moment-là.

Le processus de build arrête le site web avant le nettoyage via :

c:\Windows\System32\inetsrv\appcmd.exe stop site http://oursite.com

Cependant, cela ne libère pas le fichier — nous devons redémarrer IIS pour que le processus lâche son verrou.

appcmd.exe vous permet d’arrêter IIS complètement ; nous ne voulons pas faire cela !

Y a-t-il d’autres moyens de faire en sorte qu’IIS lâche un fichier verrouillé, sans redémarrer IIS ? Le simple arrêt et redémarrage du site web individuel ne fonctionne définitivement pas pour libérer le verrou de fichier.

J’utilise un petit outil appelé « Handle » pour cela.

Vous lui passez essentiellement le nom du fichier verrouillé et il vous indique quels processus l’utilisent :

handle c:\weird.file
Something.exe pid: 1000 100: C:\weird.file
Something.exe pid: 1000 101: C:\weird.file

Ensuite, vous lui passez le commutateur -c pour lui faire fermer le handle :

handle.exe -c 101 -p 1000 -y
handle.exe -c 100 -p 1000 -y

Vous pourriez avoir du mal à intégrer cela dans un script de build sans un programme enveloppeur pour analyser la sortie, mais j’espère que cela vous aidera.