Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Не воспринимает команду oper (http://forum.oszone.net/showthread.php?t=290353)

aBBat2 03-11-2014 14:29 2423943

Не воспринимает команду oper
 
День добрый форумчане.

У меня есть скрипт который запускает 32 экземпляра программы , выглядит он так .
Скрытый текст

On Error Resume Next
Dim WS
Set WS = WScript.CreateObject("WScript.Shell")
WS.run "%windir%\notepad.exe"
WScript.Sleep 1000 'это если надо сделать паузу (в миллисекундах)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport1.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport2.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport3.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport4.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport5.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport6.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport7.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport8.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport9.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport10.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport11.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport12.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport13.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport14.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport15.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport16.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport17.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport18.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport19.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport21.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport22.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport23.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport24.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport25.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport26.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport27.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport28.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport29.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport30.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport31.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport32.exe"+chr(34)
Set WS=nothing

Появилась необходимость запускать программы с дополнительным параметром oper "USSD1" ("G:\работа\easyport\32 изи порта\easyport2.exe" oper "USSD1")
Через пуск = выполнить запускается замечательно в этом виде , а вот через мой скрипт не хочет куда бы я этот параметр не вставил .
выскакивает ошибка "Предполагается наличие окончания инструкции КОД 800А0401 Ошибка компиляции.
Номер строчки и символа указывает на то что ему не нравится что параметр oper остается открытым.
как это дело исправить ?

Iska 03-11-2014 14:56 2423961

Цитата:

Цитата aBBat2
32 экземпляра программы »

31 экземпляр, если судить по коду. Его лучше использовать в таком виде:
Скрытый текст
Код:

Option Explicit

Dim objFSO

Dim i
Dim strPath


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

With WScript.CreateObject("WScript.Shell")
        .Run "%SystemRoot%\notepad.exe"
        WScript.Sleep 1000
       
        For i = 1 To 32
                strPath = "G:\работа\easyport\32 изи порта\easyport" & CStr(i) & ".exe"
               
                If objFSO.FileExists(strPath) Then
                        .Run """" & strPath & """", 1, False
                Else
                        WScript.Echo "Can't find file [" & strPath & "]."
                End If
        Next
End With

Set objFSO = Nothing

WScript.Quit 0


Цитата:

Цитата aBBat2
Появилась необходимость запускать программы с дополнительным параметром oper "USSD1" ("G:\работа\easyport\32 изи порта\easyport2.exe" oper "USSD1") »

Скрытый текст
Код:

Option Explicit

Dim objFSO

Dim i
Dim strPath


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

With WScript.CreateObject("WScript.Shell")
        .Run "%SystemRoot%\notepad.exe"
        WScript.Sleep 1000
       
        For i = 1 To 32
                strPath = "G:\работа\easyport\32 изи порта\easyport" & CStr(i) & ".exe"
               
                If objFSO.FileExists(strPath) Then
                        .Run """" & strPath & """ oper ""USSD1""", 1, False
                Else
                        WScript.Echo "Can't find file [" & strPath & "]."
                End If
        Next
End With

Set objFSO = Nothing

WScript.Quit 0


aBBat2 03-11-2014 15:30 2423980

Первый скрипт замечательно открывает все экземпляры программы.

А вот второй открывает примерно треть и выдает кучу ошибок http://shot.qip.ru/00fCB9-51a7On1cYB/

еще одну ошибку успел увидеть http://shot.qip.ru/00fCB9-51a7On1cYR/

Iska 03-11-2014 16:01 2423996

Цитата:

Цитата aBBat2
А вот второй открывает примерно треть и выдает кучу ошибок http://shot.qip.ru/00fCB9-51a7On1cYB/ »

Это не скрипт. Проверьте с помощью Process Explorer, что окна сообщений принадлежат экземплярам приложений.

Если речь про эту: Запуск программы EasyPort из командной строки и других приложений утилиту — то неудивительно: Вы же одновременно пытаетесь достучаться до одного псевдомодема из кучи запущенных приложений.

aBBat2 03-11-2014 16:06 2424000

Эмм я пытаюсь достучаться до одного из 32 двух реальных устройств , которое каждое на своем порту.
И я пробовал через пуск=выполнить открыть с десяток подряд не дожидаясь закрытия предыдущего приложения никаких ошибок не было . и в ручном режиме без скрипта тоже ошибка не возникает :(
исходя из того что часть приложений таки успевают открыться , может быть можно в скрипте прописать таймаут между запусками ? хотябы самый минимальный.

Iska 03-11-2014 16:35 2424020

Цитата:

Цитата aBBat2
Эмм я пытаюсь достучаться до одного из 32 двух реальных устройств , которое каждое на своем порту. »

О как. Поясните, как именно они присоединены к машине. И как Вы указываете, к какому конкретному устройству следует обращаться.

Цитата:

Цитата aBBat2
исходя из того что часть приложений таки успевают открыться , может быть можно в скрипте прописать таймаут между запусками ? хотябы самый минимальный. »

Может быть. Но лучше не гадать. «Колитесь», рассказывайте детали.

aBBat2 03-11-2014 18:13 2424095

Устройство gsm pool называется. Состоит из отдельных гсм модулей объединенных в общий пул .
http://shot.qip.ru/00fCB9-61a7On1cZr/ вот само устройство.
Суть запроса oper "USSD1 это проверка номера активных в данный момент времени сим карт . USSD1 это сокращенный запрос который в полном виде выглядит как at+cusd=1,*110*10#,15
У каждого экземпляра программы есть свой файл конфиг с раширением .ini в котором прописан com порт на который идет обращение этого запроса.
Эмм какие еще моменты нужно прояснить ?

Iska 03-11-2014 19:01 2424144

Цитата:

Цитата aBBat2
Устройство gsm pool называется. Состоит из отдельных гсм модулей объединенных в общий пул . »

Попытался малость посмотреть, что сие есть. Насколько я понимаю, всё это добро соединено с машиной одним кабелем, Ethernet или USB. Как это добро выглядит для машины, равно как и на каком уровне происходит эмуляция COM-портов — мне пока непонятно.

aBBat2 03-11-2014 19:04 2424147

Может вернемся к вопросу как реализовать таймаут хоть небольшой между обращениями ?

Iska 03-11-2014 19:05 2424148

Я бы на Вашем месте после изучения деталей поигрался с этим — Программы для мобильной связи:
Цитата:

NEW v 4.0 - программа может работать в паре с программой waitport v 1.6 (скачать - 200Кб) для организации очереди на выполнение операций с мобильным телефоном или другим устройством - специально для СисАдминов (автор идеи - Кухарец Роман Александрович)
Цитата:

Цитата aBBat2
Может вернемся к вопросу как реализовать таймаут хоть небольшой между обращениями ? »

Я полагаю, что:
Код:

WScript.Sleep <время в миллисекундах>
Вы и сами в состоянии вставить. Но это игра в орлянку.

aBBat2 03-11-2014 19:06 2424150

http://shot.qip.ru/00fCB9-51a7On1cZv/
http://shot.qip.ru/00fCB9-61a7On1cZw/
примерно так машина видит , соединено через 1 юсб кабель

aBBat2 03-11-2014 19:22 2424162

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

aBBat2 03-11-2014 19:55 2424197

Я не много не это имел ввиду , паузу перед запуском каждого экземпляра программы , а не единая пауза перед запуском всех 32

Iska 03-11-2014 19:58 2424201

Цитата:

Цитата aBBat2
примерно так машина видит , соединено через 1 юсб кабель »

Как снаружи — это то понятно. Собственно, интересно, как это выглядит изнутри. Полагаю, что либо так организован сам обмен, либо это приложение «easyport» так работает, что либо одномоментно возможен доступ только одному приложению, либо «easyport» совсем не делает попыток ожидания освобождения порта — почему я, собственно, и советовал попробовать поиграться с «waitport».

Цитата:

Цитата aBBat2
а для скрипта нельзя задать таймаут в запуске ? »

Поймите, задать сделать можно всё почти всё, если «крутить в руках достаточно долго». Вопрос в том, как гарантированно обеспечить бесперебойную работу. А вот этого мы и как раз не сможем сделать, поскольку не видим/не знаем, как оно там работает изнутри, а видим только внешние проявления.

Я бы Вам порекомендовал напрямую связаться с разработчиком «easyport» и «потеребить» непосредственно его на эту тему.

Цитата:

Цитата aBBat2
Я не много не это имел ввиду , паузу перед запуском каждого экземпляра программы , а не единая пауза перед запуском всех 32 »

Да без разницы. Я же сказал — просто вставьте «WScript.Sleep», например:
Код:

Option Explicit

Dim objFSO

Dim i
Dim strPath


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

With WScript.CreateObject("WScript.Shell")
        .Run "%SystemRoot%\notepad.exe"
        WScript.Sleep 1000
       
        For i = 1 To 32
                strPath = "G:\работа\easyport\32 изи порта\easyport" & CStr(i) & ".exe"
               
                If objFSO.FileExists(strPath) Then
                        .Run """" & strPath & """ oper ""USSD1""", 1, False
                       
                        WScript.Sleep 100 ' 100 миллисекунд
                Else
                        WScript.Echo "Can't find file [" & strPath & "]."
                End If
        Next
End With

Set objFSO = Nothing

WScript.Quit 0

Но нет никаких гарантий, что, даже если сегодня сие заработает, оно будет бесперебойно работать и завтра.

aBBat2 03-11-2014 20:22 2424219

В общем запустив waitport v 1.6 в функциях появилось автоопределение портов и почему то оно ограничено только 9 портам с 1 по 9
Вот они у меня и запускались при общем запуске и так же через пуск=выполнить ...
поставил таймаут 2500 милисекунд и в итоге в один момент времени получалось не больше 9 экземпляров программы ( пока открывалась 9 экземпляр первый уже выполнял функцию и закрывался ) и весь цикл прошел без ошибок .

Проблема решена , это связано с тем что больше 9 портов разрывали программе мозг .
Большой спасибо за помощь в решении задачи , дополнительная пауза действительно помогла ;)

Если нужна будет помощь в моей сфере обращайтесь всегда помогу .
icq 18050000

Iska 03-11-2014 20:26 2424223

А какая у Вас сфера?

aBBat2 03-11-2014 20:28 2424225

Активации , регистрации в общем любые сервисы где нужны телефонные номера .

Iska 03-11-2014 20:50 2424239

aBBat2, спасибо, ясно. У меня нет мобильного телефона ;).


Время: 16:30.

Время: 16:30.
© OSzone.net 2001-