web-dev-qa-db-fra.com

Impossible d'utiliser des parenthèses lors de l'appel d'une sous-erreur 800A0414 VBS

L'erreur 800A0414 s'affiche aux lignes 7 et 12 de ce script:

Module Module1

  Dim p

    Sub Main()
        CreateObject("Wscript.Shell").Run("program.bat", 0, True)

        p = Process.GetProcessesByName("program")
        If p.Count > 0 Then
            WScript.Sleep(300000)
        Else
            CreateObject("Wscript.Shell").Run("program clean up.bat", 0, True)
        End If

    End Sub

    Private Function WScript() As Object
        Throw New NotImplementedException
    End Function

End Module

J'essaie d'exécuter un script de traitement par lots, qui démarre un processus, puis attends la fin du processus, puis lance un autre script de traitement par lots Je ne veux pas non plus que des boîtes de commande soient affichées. Si leur est un moyen plus facile s'il vous plaît faites le moi savoir.

Merci de votre aide

19
Strong

Lorsque vous mettez la liste d'arguments d'une procédure entre parenthèses, vous devez utiliser le mot clé Call :

Call CreateObject("WScript.Shell").Run("program.bat", 0, True)

Si vous omettez le mot clé Call, vous devez également supprimer les parenthèses:

CreateObject("WScript.Shell").Run "program.bat", 0, True
47
Helen

Pour compléter ce qui a été dit auparavant:

Lorsque Appel le mot clé est utilisé pour appeler une procédure (c'est-à-dire une sous-fonction ou une fonction), les arguments doivent être entre parenthèses, sauf lorsque la procédure n'a pas d'argument, auquel cas les parenthèses sont facultatives. Par exemple toutes les déclarations:

Call test()
Call test
Call test(1,2)

sont valables, mais pas celui-ci:

Call test 1

Lorsque vous appelez une procédure sans utiliser le mot clé Call , les parenthèses peuvent uniquement être utilisées lorsque la procédure a zéro ou un argument ou la procédure a une valeur de retour (c'est-à-dire une fonction ) et sa valeur est utilisée dans le même déclaration. Par exemple toutes les déclarations:

test()
test(1)
test(1,2)
a = test
a = test(1,2)
a = test(test(1,2),2)

sont valables, sauf le troisième qui a plus d'un argument. Dans le cas où ce n'est pas clair, l'appel interne de "test" dans la dernière instruction est valide car sa valeur de retour est utilisée comme argument d'un autre appel.

Notez que chaque fois que des parenthèses sont utilisées dans ce texte, cela implique également les valeurs possibles séparées par une virgule .

7

Il me semble que c'est un fichier VB.NET et non du code VBScript. Vous avez Fonction Shell dans VB.NET (et d’autres méthodes).

Quoi qu'il en soit, Run renvoie tout code d'erreur renvoyé par le programme, et si vous stockez le résultat dans une variable, vous pouvez utiliser des parenthèses dans ce cas.

Dim lResult As Long
lResult = CreateObject("Wscript.Shell").Run("program.bat", 0, True)

@Helen a répondu au reste.

0
Panayot Karabakalov