Как запустить внешний VBS скрипт из советника?

 

Есть определённая потребность запустить внешний VBS скрипт из советника (например произвести перезагрузку терминала или компьютера)

Кто знает как это можно сделать?

Заранее благодарю за помощь!

 

Вариант 2 (не жесткий)

1) Воспользоваться утилитой CScript MSDN

 
GarF1eld писал(а) >>

Вариант 2 (не жесткий)

1) Воспользоваться утилитой CScript MSDN

Не понял предложения. Как можно сделать из эксперта вот это?

***************

Start the MS-DOS command prompt.

***************

 
solandr писал(а) >>

Есть определённая потребность запустить внешний VBS скрипт из советника (например произвести перезагрузку терминала или компьютера)

Кто знает как это можно сделать?

Заранее благодарю за помощь!

Есть прога в нете. Может создать exe типа закрыть выбранную прогу или открыть её. Далее прописываем этот exe в Винду, чтоб выполнялась каждую 1 минуту (скажем). Это не надо объяснять??? Если что-то спросить - в личку

 
solandr >>:

Не понял предложения. Как можно сделать из эксперта вот это?

***************

Start the MS-DOS command prompt.

***************

ну давайте-ка пораскинем мозгами.

у нас имеется: 1 vb script, 1 утилита CScript, 1 советник из которого мы можем вызывать функции из сторонних библиотек.

Далее у нас есть Winapi функция ShellExecute (должна подойти), которая сможет выполнить утилиту.

...

 

Тут уже мне Slava в 2006 году ответил:

https://www.mql5.com/ru/forum/53320

Модератор
Slawa 16.01.2006 13:14


#import "kernel32.dll"
int WinExec(string lpCmdLine, int uCmdShow);

WinExec("F:\\PhoneCall.exe", 1);

Буду пробовать данный вариант пока что.

 
solandr >>:

Есть определённая потребность запустить внешний VBS скрипт из советника (например произвести перезагрузку терминала или компьютера)

Кто знает как это можно сделать?

Заранее благодарю за помощь!

Можно завести в папке files советника пустой командный файл vbs (или js). Что бы не ругался, в нем написать "rem Тру-ля-ля". В Tasks (Назначенные задания) прописать его периодическое исполнение. Из советника в файл можно какую угодно последовательность команд записать. Только нужно предусмотреть ограничение на количество запусков.

Решение не зависимо от настроек импорта длл, имеет некоторые удобства в защищенной сети.

 

Всем спасибо за ответы!

В итоге пришёл вот к такому решению.

Запуск через WinExec командного файла bat, через который запускается скрипт, выполняющий ребут компа.

Немного сложновато, но стандартное предложение WinExec("shutdown /t 0 /r", 0); у меня работать отказывалось почему-то.

#import "kernel32.dll"
int WinExec(string lpCmdLine,int uCmdShow);

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
WinExec("E:\\SOME_PATH\\experts\\Reboot.bat",1);


//----
   return(0);
  }



Reboot.bat
**********
cmd /c start /min E:\SOME_PATH\experts\Reboot.Wsf /Reboot:YES
pause
*********



Reboot.Wsf
*********
<job>
<script language="VBScript">

On Error Resume Next

Set oArgs = WScript.Arguments.Named

Set objNetwork = WScript.CreateObject("WScript.Network")
MachineName = objNetwork.ComputerName

If oArgs.Item("Reboot") = "YES" Then
   dim OpSysSet, obj
   Set OpSysSet = GetObject("winmgmts:{impersonationLevel=impersonate," & "(Shutdown)}//./root/cimv2").ExecQuery ("SELECT * FROM Win32_OperatingSystem" & " WHERE Primary=true")

   For Each obj In OpSysSet
      obj.Reboot(8)
   Next
Else
   WScript.Echo "To reboot you computer run me with parameter /Reboot" & vbLF & "Example: Reboot.Wsf /Reboot:YES"
End IF

</script>
</job>
**********

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