No se pueden usar paréntesis cuando se llama a un Sub Error 800A0414 VBS

Recibo el error 800A0414 en las líneas 7 y 12 de este 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 

Estoy tratando de ejecutar un script por lotes, que inicia un proceso, luego espera hasta que el proceso finalice y luego ejecuta otro script por lotes. Tampoco quiero que se muestren cuadros de comando. Si es una manera más fácil, háganmelo saber.

Gracias por tu ayuda

Cuando encierra la lista de argumentos de un procedimiento entre paréntesis, debe usar la palabra clave de Call :

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

Si omite la palabra clave Call , también debe colocar paréntesis:

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

Para completar lo que se ha dicho antes:

Cuando Call keyword se usa para llamar a un procedimiento (es decir, sub o función), los argumentos deben estar entre paréntesis, excepto cuando el procedimiento no tiene argumentos, en cuyo caso los paréntesis son opcionales. Por ejemplo, todas las declaraciones:

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

son válidos, pero no este:

 Call test 1 

Cuando se llama a un procedimiento sin utilizar la palabra clave Call , los paréntesis solo se pueden usar cuando el procedimiento tiene cero o un argumento o el procedimiento tiene un valor de retorno (es decir, es una función ) y su valor se usa en la misma statement. Por ejemplo, todas las declaraciones:

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

son válidos, excepto el tercero que tiene más de un argumento. En caso de que no esté claro, la llamada interna de “prueba” en la última statement es válida porque su valor de retorno se usa como argumento para otra llamada.

Tenga en cuenta que cada vez que se utiliza paréntesis en este texto, también implica los posibles valores separados por comas .

Me parece que esto es un VB.NET, no un código VBScript. Tiene la función Shell en VB.NET (y otros métodos).

De todos modos, Run devuelve cualquier código de error devuelto por el progtwig, y ​​si almacena ese resultado en una variable, puede usar paréntesis en este caso.

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

El rest fue respondido por @Helen.