VB 6 shell не работает должным образом

Кирилл

Команда форума
Администратор
Сообщения
14,056
Реакции
6,110
Баллы
993
Всем привет.
Нужен совет:
Простой запуск внешней программы не работает
Start_Programm_ = Shell("C:\Program Files (x86)\Programm\Programm_.exe", 1)

Сначала я предполагал, что проблема в рабочем каталоге, но когда с помощью ChDir переназначил - ничего не изменилось.
Причем тот же блокнот стартует как положено...
Самое интересное - вчера то все работало.
Кто то может сталкивался?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,325
Реакции
5,799
Баллы
718
Попробуй удвоить кавычки.
Код:
Start_Programm_ = Shell("""" + "C:\Program Files (x86)\Programm\Programm_.exe" + """", 1)
 

Кирилл

Команда форума
Администратор
Сообщения
14,056
Реакции
6,110
Баллы
993
Dragokas, пробовал)
Решение неожиданное:
Shell выполняется в асинхронном режиме, точнее запускаемые ей операции.
И получилось так, что функция проверки наличия процесса и завершения его (для загрузки обновления программы) вызывалась параллельно с запуском программы, но выполнялась чуть дольше - программа запускается, ей присваивается PID, а затем через функцию подхватывался и убивался только что запущенный процесс))
Все отрегулировал.

Вот так нелепо я полдня себе испортил.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,325
Реакции
5,799
Баллы
718
Shell выполняется в асинхронном режиме, точнее запускаемые ей операции.
Если нужно в синхронном, по простому - можешь воспользоваться:

Код:
Set WshShell = CreateObject("WScript.Shell")
RetCode = WshShell.Run("notepad", 1, True)
Из справки:​

Параметры:

<Command> - строка, командная строка запуска приложения.​
<WindowStyle> - необязательный, число. Определяет вид окна запускаемого приложения. Некоторые возможные значения:​
1 - Активизирует и отображает окно.​
2 - Активизирует окно и отображает его в свёрнутом виде.​
3 - Активизирует окно и отображает его в максимизированном виде.​
<WaitOnReturn> - необязательный, булево (число). True - сценарий возобновит работу только после завершения вызванного процесса. False (по умолчанию) - управление передаётся сразу обратно в сценарий.​

Описание:

Если параметр "WaitOnReturn" установлен в True, метод возвращает код выхода вызванного приложения. Иначе метод всегда возвращает ноль.​

Вот так нелепо я полдня себе испортил.
Так ты спрашивай, если чё.
 

Кирилл

Команда форума
Администратор
Сообщения
14,056
Реакции
6,110
Баллы
993
Спасибо, сейчас увидел, что и WScript.Shell до этого пробовал эксплуатировать неправильно )
Вообще пришел к выводу что для vb предварительно стоит разобраться в Си, как и для многих других языков - по наблюдениям многие из них Си-образные.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,325
Реакции
5,799
Баллы
718
Нету там практически ничего си-подобного.
 

Сергій

Разработчик
Сообщения
446
Реакции
233
Баллы
278
Я делаю приблизительно так же:

Dim Proga As String, v As Variant

Proga = Chr(34) + "адрес программы" + Chr(34)
Set v = CreateObject("Wscript.Shell")
v.run Proga, vbNormal, True
Set v = Nothing
 
Сверху Снизу