WScript.Shell не работает по неизвестным причинам VB6.5

В VBA я использую написанное мной внешнее программное обеспечение. Я знаю, что программа работает хорошо. Я могу запустить его из командной строки. Но когда я пытаюсь выполнить его с помощью WScript.Shell.Run, он возвращает 1 и никогда не запускается. Я даже не могу сказать, что он вообще запускает программное обеспечение.

Вот исполняющая часть класса VBA.

Public Function Execute() As Integer
    Dim wsh As Object
    Dim waitOnReturn As Boolean: waitOnReturn = True
    Dim windowStyle As Integer: windowStyle = 1
    Dim exitCode As Integer: exitCode = -1

    Set wsh = VBA.CreateObject("WScript.Shell")

    'Run program with arguments and wait for the program to finish 
    If Me.PrinterType = 1 Then exitCode = wsh.Run(Me.Path & " /serial = " & Me.SerialNumber & " /position = " & Me.Location & "", windowStyle, waitOnReturn)
    If Me.PrinterType = 2 Then exitCode = wsh.Run(Me.Path & " /boxid = " & Me.Location & " /version = " & Me.Version, windowStyle, waitOnReturn)
    Execute = exitCode

End Function

Пример полной строки выполнения:

C:.path.to.\PrintLabel.exe /serial=EOSJ61110044 /position=2

Доказательства того, что сценарий выполняется без ошибок на том же компьютере, на котором выполняется VBA: WScript.Shell не работает по неизвестным причинам VB6.5

Так что я понятия не имею, что происходит.

Я могу успешно использовать следующий Функция оболочки VBA:

If Me.PrinterType = 1 Then exitCode = Shell(Me.Path & " /serial = " & Me.SerialNumber & " /position = " & Me.Location, vbHide)

Но тогда проблема заключается в том, что VBA не дожидается завершения работы программного обеспечения, прежде чем продолжить. Так что мне нужно продолжать попытки заставить WScript.Shell работать. Что мне не хватает? Есть ли какие-то конкретные ссылки, которые нужно включить, но которых мне может не хватать?

Обновление 1:

Пытался имитировать этот пост SO, но все равно безуспешно:

If Me.PrinterType = 1 Then fullExecutionString = Me.Path & " /serial = " & Me.SerialNumber & " /position = " & Me.Location
If Me.PrinterType = 2 Then fullExecutionString = Me.Path & " /boxid = " & Me.Location & " /version = " & Me.Version
wsh.Run fullExecutionString, windowStyle, waitOnReturn

Обновление 2: Сделал небольшой метод, который повторяет процесс в windows cmd console. Он работает (более или менее) с тем же кодом. Я предполагаю, что это как-то связано со строкой пути к команде с аргументами?

Private Sub Button2_Released()
    Dim wsh As Object
    Dim waitOnReturn As Boolean: waitOnReturn = True
    Dim windowStyle As Integer: windowStyle = 1
    Dim exitCode As Integer: exitCode = 0
    Set wsh = VBA.CreateObject("WScript.Shell")
    exitCode = wsh.Run("C:\Windows\System32\cmd.exe", windowStyle, waitOnReturn)
End Sub
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
145
1

Ответы 1

Отвечая на свой вопрос:

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

exitCode = wsh.Run("""C:\path.to\PrintLabel.exe"" /serial=EOSJ61110044 /position=2", windowStyle, waitOnReturn)

Итак, в конце концов я скорректировал свое свойство Path:

Public Property Let Path(ByVal NewValue As String)
   actPath = Chr(34) & NewValue & Chr(34)
End Property
Public Property Get Path() As String
    Path = actPath
End Property

Другие вопросы по теме