windows script host error при выполнении ShellExecuteW

[Удален]  

День добрый!

При выполнении этого кода больше 3 раз 

//+------------------------------------------------------------------+
//|                                            ShellExecuteCatch.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
#import "shell32.dll"
   int ShellExecuteW(int hwnd,string lpOperation,string lpFile,string lpParameters,string lpDirectory,int nShowCmd);
#import
void OnStart()
  {
//---
string file2run="";
file2run = TerminalInfoString(TERMINAL_DATA_PATH)+"\\MQL5\\Files\\1sspeechexample.vbs";
   for(int i=0;i<4;i++)
   {
      ShellExecuteW(NULL,NULL,file2run,"","",0);
  }
  }
//+------------------------------------------------------------------+


по окончанию работы MQL5 скрипта появляется окно




Сам vbs файл во вложении с измененным с .vbs на .txt расширением, иначе форум не принимает.

Скрипт отрабатывает корректно и фраза "Hello, World" произносится 4 раза, но вот это окно по окончании...

Не подскажете, как можно "отловить" это поведение, чтобы предотвратить появление всплывающего окна по окончанию скрипта?

Файлы:
Koldun Zloy  
nkaretnikov:

День добрый!

При выполнении этого кода больше 3 раз 


по окончанию работы MQL5 скрипта появляется окно




Сам vbs файл во вложении с измененным с .vbs на .txt расширением, иначе форум не принимает.

Скрипт отрабатывает корректно и фраза "Hello, World" произносится 4 раза, но вот это окно по окончании...

Не подскажете, как можно "отловить" это поведение, чтобы предотвратить появление всплывающего окна по окончанию скрипта?

Разрядность терминала?

Igor Makanu  

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

попробуйте сначала паузу Sleep(10 000) добавить в цикл, если поможет уменьшайте 10 000 до приемлемого значения

у меня такие "чудеса" при первом запуске .dll под .Net были, подобрал опытным путем паузу, теперь все ОК

Koldun Zloy  
Igor Makanu:

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

попробуйте сначала паузу Sleep(10 000) добавить в цикл, если поможет уменьшайте 10 000 до приемлемого значения

у меня такие "чудеса" при первом запуске .dll под .Net были, подобрал опытным путем паузу, теперь все ОК

Первым делом надо DLL Правильно вызвать. А это зависит от разрядности. Приведённый код для 32 разрядного терминала.

[Удален]  
Koldun Zloy:

Разрядность терминала?

в Help\About это не указано. Как узнать разрядность терминала?

[Удален]  
Igor Makanu:

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

попробуйте сначала паузу Sleep(10 000) добавить в цикл, если поможет уменьшайте 10 000 до приемлемого значения

у меня такие "чудеса" при первом запуске .dll под .Net были, подобрал опытным путем паузу, теперь все ОК

Хорошая идея! Это помогло с ошибкой при нормальном окончании скрипта. Но если принудительно выгружать скрипт из бесконечного цикла,

   for(int i=0;i>-1;i=i)
   {
      ShellExecuteW(NULL,NULL,file2run,"","",0);
      Sleep(10000);
  }

то она все равно появляется.

Koldun Zloy  

Попробуйте так:

#import "shell32.dll"
   long ShellExecuteW( long hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd );
#import
SeriousRacoon  

https://www.hresult.info/FACILITY_ITF/0x80045006 - "The wave device is busy."

Нужно использовать WaitUntilDone - https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms723616(v=vs.85)

[Удален]  
SeriousRacoon:

https://www.hresult.info/FACILITY_ITF/0x80045006 - "The wave device is busy."

Нужно использовать WaitUntilDone - https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms723616(v=vs.85)

похоже это оно самое! 

Спасибо, буду пробовать

[Удален]  
SeriousRacoon:

https://www.hresult.info/FACILITY_ITF/0x80045006 - "The wave device is busy."

Нужно использовать WaitUntilDone - https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms723616(v=vs.85)

ознакомился поглубже.

Изменил немного озвучку

dim speechobject
set speechobject=createobject("sapi.spvoice")
speechobject.speak "The MQL5 + VBS = Love"
speechobject.WaitUntilDone (-1)

и все одно, при выгрузке MQL5 скрипта, появляется 80045006

Есть ощущение, что WaitUntilDone контролирует контекст самого vbs, а когда он рушится принудительно из MQL никакой WaitUntilDone уже не помогает.

Если это так, то помогла бы задержка перед выгрузкой MQL5 скрипта. Т.е. при

подождать пока ShellExecuteW наговорится

Такое реально?

[Удален]  
Koldun Zloy:

Попробуйте так:

попробовал, но получил ошибку во время исполнения


Причина обращения: