2015-07-14 1 views
0

J'ai un scénario qui, si une application est déjà installée, désinstalle d'abord l'ancienne version, puis installe une nouvelle version.Le script n'attend pas que l'instruction se termine et commence à s'exécuter sur la ligne suivante

je l'ai écrit suivant morceau de code dans un fichier batch en utilisant VBScript:

Set WshShell = WScript.CreateObject("WScript.Shell") 

Set fso = CreateObject("Scripting.FileSystemObject") 

path="C:\Program Files\MySetup\My App 3.5" 'path to folder  
exists = fso.FolderExists(path) 

if (exists) then 
    WshShell.Run "msiexec /qb /x {3D5D4357-217C-49BA-A8E8-00907D631F05} " 
end if 
    WshShell.Run "msiexec /qb /i C:\Build\" & msiFileName 

Je suis confronté à un problème que lorsque l'exécution va au bloc if (exist), laisse supposer l'application est déjà installée, il va à l'intérieur if bloquez et commencez à désinstaller l'application et l'exécute de façon asynchrone et commencez à exécuter la ligne suivante (en installant la nouvelle version) et cela pose le problème qu'une "autre installation est déjà en cours". Tout ce que je veux qu'une fois qu'il va pour désinstaller l'application, il devrait attendre jusqu'à ce qu'il soit terminé, puis seulement aller à la ligne suivante pour l'exécution (installation de la version plus récente).

Répondre

2

Vous devez utiliser le troisième paramètre de WSHShell.Run(), définissez-le sur true pour attendre la fin de la commande.

if (exists) then 
    WshShell.Run "msiexec /qb /x {3D5D4357-217C-49BA-A8E8-00907D631F05} " ,0,true 
end if 
WshShell.Run "msiexec /qb /i C:\Build\" & msiFileName,0,true 
+0

J'ai utilisé ce que vous avez spécifié mais n'attend pas que l'instruction soit terminée. –

+0

Vérifiez s'il y a quelque chose à désinstaller, ajoutez une clé pour enregistrer l'activité de 'msiexec' et analysez, il pourrait y avoir des erreurs respectives de désinstallation/MSIexec. – Vesper

+0

Merci, il semble fonctionner maintenant. –