Подтвердить что ты не робот

Невозможно использовать круглые скобки при вызове Sub Error 800A0414 VBS

Я получаю ошибку 800A0414 в строках 7 и 12 этого 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

Я пытаюсь запустить пакетный пакет script, который запускает процесс, а затем дождитесь завершения процесса, затем запустим еще одну партию script. Я также не хочу показывать какие-либо командные поля. Если их проще, пожалуйста, дайте мне знать.

Спасибо за помощь

4b9b3361

Ответ 1

Когда вы вставляете список аргументов процедуры в круглые скобки, вы должны использовать ключевое слово Call:

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

Если вы опускаете ключевое слово Call, вы также должны отбрасывать круглые скобки:

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

Ответ 2

Чтобы завершить сказанное ранее:

При использовании Call ключевого слова для вызова процедуры (то есть суб или функции) аргументы должны быть заключены в круглые скобки, за исключением случаев, когда процедура не имеет аргументов, и в этом случае скобки являются необязательными. Например, все утверждения:

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

действительны, но не следующие:

Call test 1

При вызове процедуры без использования ключевого слова Call круглые скобки могут использоваться только в том случае, если процедура имеет нулевой или один аргумент, или процедура имеет возвращаемое значение (т.е. является функцией) и ее значение используется в одном выражении. Например, все утверждения:

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

действительны, кроме третьего, который имеет более одного аргумента. Если это не ясно, внутренний вызов "теста" в последнем утверждении действителен, потому что его возвращаемое значение используется в качестве аргумента для другого вызова.

Обратите внимание, что всякий раз, когда в этом тексте используются круглые скобки, он подразумевает также возможные значения, разделенные запятыми.

Ответ 3

Мне кажется, что это VB.NET, а не код VBScript. У вас Функция оболочки в VB.NET(и другие методы).

В любом случае Run возвращает код ошибки, возвращаемый программой, и если вы хранилище, которое приводит к переменной, вы можете использовать круглые скобки в этом случае.

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

На остальное ответил @Helen.