2013-04-10 1 views
0

J'ai un script pour désinstaller un paquet, disons pkg_1 en utilisant sa chaîne de désinstallation (c'est-à-dire setup.exe -remove). Après cela, il essaie d'enlever un autre paquet, disons pkg_2. La désinstallation de pkg_1 prend environ 1 à 2 minutes. le script ressemble comme ci-dessousLe contrôle passe à l'instruction suivante immédiatement après l'exécution d'une commande à l'aide de la méthode d'exécution

rc = shellobj.Run("cmd /C " & uninstall_string_1 & " /silent",0, true) 
rc1 = shellobj.Run("cmd /C " & uninstall_string_2 & " /silent",0, true) 

Voici quel est mon problème, si vous placez WScript.Sleep (120000) entre deux déclarations ci-dessus, les deux paquets sont se supprimés. Sinon, la désinstallation de pkg_1 est interrompue et la désinstallation de pkg_2 commence immédiatement. Par conséquent, seul pkg_2 est supprimé (sans sommeil). Comment puis-je faire la désinstallation de deux paquets sans utiliser la méthode de sommeil?

Pour votre information Si vous exécutez uninstall_string_1 d'invite de commande, nouveau message sera opned après 0-5 secondes et le produit de désinstallation en arrière-plan

Répondre

0

Arjun, je lis ceci dans un autre forum:

Lorsque nous utilisons des scripts pour installer ou désinstaller des paquets, cela dépend beaucoup de l'implémentation du paquet. Supposons que setup.exe s'exécute lui-même en tant que processus A. Le processus A effectue une vérification nominale puis génère un processus B, le moteur d'installation réel, puis se ferme. Dans ce cas, le bWaitOnReturn (que vous avez défini sur true dans votre code) a fait son travail et le contrôle passera à l'instruction suivante. Cependant, le processus B est toujours en cours d'exécution. C'est hors de contrôle du bWaitOnReturn. Donc votre 2ème paquet commencera avant que votre premier paquet soit réellement accompli. Peut-être que votre premier paquet n'est pas réellement arrêté, cela peut prendre du temps et s'exécuter en arrière-plan. C'est juste une supposition de toute façon.

Si ce n'est pas le cas, vous pouvez aussi essayer ceci:

Set obj0 = CreateObject("WScript.Shell") 
Set objExec = obj0.Exec("your package../../") 
' We will set a loop until finished 
Do While objExec.Status <> 1 
WScript.Sleep 100 
Loop 

Alors toutes les 100ms, le script vérifiera si votre colis a terminé son exécution. Et si c'est le cas, il passera à la déclaration suivante.

+0

Comme vous avez dit uninstallation pkg_1 ne s'arrête. Mais parfois, pkg_1 est supprimé et parfois non. Le code que vous avez mentionné ne fonctionne pas pour moi (c'est-à-dire ne pas résoudre ce problème) – gopu

+0

@ arjun - Ok. Peut-être que quelqu'un d'autre peut vous aider. –

0

Essayez celui-ci:

strCmd = uninstall_string_1 & " & " & uninstall_string_2 
rc = shellObj.Run("cmd /C " & strCmd, 0, True) 
+0

Cela ne fonctionne pas pour moi. Il essaie d'exécuter les deux commandes à la fois. – gopu

Questions connexes