2008-11-19 11 views
2

Je travaille avec un fichier VB Script écrit par quelqu'un d'autre qui utilise les appels WMI (Windows Management Instrumentation) pour vérifier l'état de plusieurs services Windows. Ce script s'exécute toutes les quelques minutes sur le calendrier défini. J'ai besoin de mettre à jour/remplacer le fichier .exe pour ces services.Vous voulez script Windows WMI (wmiprvse.exe) pour libérer le handle sur le fichier

J'arrête le script VB, arrête les services et désinstalle les services afin qu'ils n'apparaissent plus dans le panneau Services (services.msc). Malheureusement, WMI (wmiprvse.exe) a toujours un handle sur les fichiers de service .exe. Je peux libérer la poignée en redémarrant le système, mais je veux éviter cela si cela est possible, donc cela peut être une mise à jour entièrement scriptée/automatisée.

Existe-t-il un moyen de forcer WMI à libérer son handle sur le fichier .exe? S'il vous plaît gardez à l'esprit que je suis nouveau à travailler avec WMI.

Répondre

1

Je suis également à la recherche d'une solution à ce problème. Je voudrais aussi comprendre pourquoi wmiprsve gère certains de mes exécutables de service mais pas d'autres.

La solution de contournement que j'utilise est de tuer le processus wmiprvse. Vous pouvez utiliser les outils de ligne de commande SysInternals (pslist, pskill) pour automatiser l'obtention de l'identificateur de processus et l'exécution de la destruction.

0

Vous pouvez simplement redémarrer le service WMI (winmgmt) pour le forcer à libérer vos fichiers. Si votre service n'est pas enregistré au démarrage de WMI, il ne verrouille pas les fichiers.

Arrêtez le service, désinstallez le service, redémarrez WMI, remplacez les fichiers, démarrez le service.