2009-08-27 7 views
2

Bonjour,wshshell.run (InstallPath, 0, true) ne pas attendre pour terminer l'installation et le script se poursuit

Je travaille sur un projet pour mon entreprise pour lancer une mise à jour sur les postes de travail des employés. Le fichier se trouve sur un serveur web sur notre domaine. L'utilisateur cliquera sur un lien et lancera le script.

J'ai fait deux fonctions une pour télécharger le fichier sur le C: \ et un autre pour exécuter le programme d'installation. Le fichier est un .exe (je souhaite que ce soit un .msi). J'utilise wshshell.run (installPath, 0, true) pour exécuter le fichier. D'après ce que je comprends, cela devrait cacher la fenêtre d'installation et attendre que l'exécution soit terminée.

Il démarrera mais il n'attendra pas pour terminer l'installation car il y a deux étapes dans le fichier .exe. Une fois la "préparation à l'installation" terminée, le script continue son travail.

Je pourrais placer Wscript.sleep. Cependant, toutes les machines n'ont pas la même vitesse de traitement. Donc, je ne saurai pas combien de temps attendre.

Avez-vous des suggestions pour ce que je pourrais faire?

Merci,

Brian

Répondre

2

Les procédures d'installation génèrent généralement plusieurs processus (par exemple, setup.exe, msiexec.exe, install.exe, idriver.exe, etc.) et il semble que votre fichier setup.exe se ferme après la première étape ("Préparer l'installation") avoir lancé un autre processus qui termine l'installation. Dans ce cas, WshShell.Run n'aidera pas à terminer l'installation.

Vous devriez être en mesure de le faire en utilisant WMI, cependant. À savoir, vous pouvez vous abonner à la création de processus et traiter les événements WMI de suppression et ainsi surveiller la création de processus et attendre leur fin. Voici quelques-uns des Hey, Scripting Guy! articles sur le sujet:

+0

Je devais trouver ce processus a commencé et qui a fait l'affaire. C'était très utile et très bien écrit aussi. Merci beaucoup! -Brian – Illure

0

Il semble que votre fichier de configuration fraie un autre processus, puis la sortie. Si c'est le cas, il n'y a rien que vous puissiez faire, sauf peut-être écrire un exécutable "wrapper" qui attend que les deux processus se terminent, et l'invoquant à la place.

Questions connexes