2010-08-24 23 views
0

Je suis en train d'exécuter le bit de code suivant dans une dll VB6:Wscript.Shell Run ne fonctionne pas toujours

Dim objWSShell As Object 
Set objWSShell = CreateObject("Wscript.Shell") 
objWSShell.Run strPath & "test.bat", 0, True 

Le processus dll se raccrocha. Le fichier batch ne sera pas exécuté, quel que soit son contenu. J'ai même essayé un fichier batch vide et il a tout de même raccroché. Cependant, si j'essaie ce même morceau de code, avec cette modification:

Dim objWSShell As Object 
Set objWSShell = CreateObject("Wscript.Shell") 
objWSShell.Run "calc", 0, True 

Cela fonctionne très bien. Je n'arrive pas à comprendre pourquoi les fichiers exe fonctionnent et les fichiers bat ne le font pas. Des idées?

Répondre

2

Vous devez exécuter cmd.exe et lui transmettre votre fichier BAT.

objWSShell.Run "%COMSPEC% /c " & strPath & "test.bat", 0, True 
+0

Merci beaucoup! Cela a fait l'affaire. –

3

Vous n'avez pas besoin d'utiliser les trucs de script shell, vous pouvez rendre les choses plus simples & utiliser le construit en Shell() fonction:

shell environ$("COMSPEC") & " /C c:\xxx\yyy.bat", vbNormalFocus 

Même chose pour:

shell "calc", vbNormalFocus 
+0

Je suis d'accord avec cela, et il peut être amélioré en utilisant une technique "Shell et attendre" si nécessaire. Google devrait trouver quelques exemples facilement. – Bob77

+0

Je vais garder cela à l'esprit aussi. –

1

I avait un similar issue où les fichiers batch ne pouvaient pas être exécutés directement à partir de WScript.Shell mais je n'avais pas accès à modifier le VBScript. Il s'avère qu'il y avait une substitution de registre sur l'extension .bat. Alors que l'utilisation de COMSPEC a fonctionné pour moi, la suppression de la clé de registre a corrigé plus que le problème WScript.