![]() |
![]() |
![]() |
|
Чем заменить WScript.Shell.Run? | ☑ | ||
---|---|---|---|---|
0
TormozIT
гуру
25.11.08
✎
19:29
|
Хочу запустить консольное приложение невидимым с параметрами и дождать завершения.
Делаю так WshShell = Новый COMОбъект("WScript.Shell"); WshShell.Run(СтрокаЗапуска, 0, Истина) Но при выполнении второй строки события срабатывают. Т.е. пока команда Run не отработала GUI хавает команды от юзера и выполняет их! Это конечно клево, но у меня из-за этого баги трудно уловимые. |
|||
1
IronDemon
25.11.08
✎
19:35
|
Попробуй, На VBS.
On Error Resume Next Set objClass = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2:Win32_Process") 'WScript.Echo "Запускаем" Res = objClass.Create("C:\Program Files\1CV8PDA\1Cv8pSRV.exe ""Параметры""", Null, Null, PID) If Res <> 0 Then WScript.Echo "Код ошибки: " & Res WScript.Quit End If 'Делаем дальше |
|||
2
Fragster
гуру
25.11.08
✎
19:39
|
попробуй 3-м параметром -1 или 1 поставить
|
|||
3
Fragster
гуру
25.11.08
✎
19:41
|
кстати, а строка запуска, случайно не со start начинается? если да, то сам виноват, убери :)...
|
|||
4
TormozIT
гуру
25.11.08
✎
19:46
|
(1) Мне необходимо сделать это из втроенного языка 1С8.1
(3) Строка такая "prim.exe -2" (2) Не думаю, что это стоит пробовать. Такого явного косяка в платформе не может быть. |
|||
5
Fragster
гуру
25.11.08
✎
19:51
|
(4) в v7 вот это:
Процедура глПауза(Сек) scr = СоздатьОбъект("WScript.Shell"); scr.Run("ping 127.0.0.1 -n "+СокрЛП(Число(Сек)),0,1); КонецПроцедуры; работает уже фиг знает сколько - без показа окна, и именно паузой... |
|||
6
TormozIT
гуру
25.11.08
✎
19:53
|
(5) Верю.
Я 2 месяца не мог понять причины багов. А сегодня решил таки добить этот рассадник зла. И оказалось, что непонятно, чем его заменять. |
|||
7
Гений 1С
гуру
25.11.08
✎
19:55
|
А в WScript есть атрибут, который содержит статус - завершено или нет.
Если есть, то просто его анализировать в цикле и усе. |
|||
8
TormozIT
гуру
25.11.08
✎
19:59
|
(7) Так курсор выполнения заморожен, если ждем завершения.
А если не ждем, то лепить цикл, нагружающий ЦП на полную как то не очень красиво. |
|||
9
Fragster
гуру
25.11.08
✎
19:59
|
(6) проверь на пинге... а то может программа процесс несвязанный запускает, и завершается....
|
|||
10
TormozIT
гуру
25.11.08
✎
20:03
|
(9) Я УЖЕ ВСЕ ПРОВЕРИЛ. КУРСОР ВЫПОЛНЕНИЯ В 1С ОСТАНАВЛИВАЕТСЯ, ИНАЧЕ БЫ "ВНУТРИ" СТРОКИ С RUN НЕ ВЫЗЫВАЛИСЬ СОБЫТИЯ.
|
|||
11
Fragster
гуру
25.11.08
✎
20:06
|
(10) я таки не понял, он таки ждет и тебе надо чтобы не ждал, или не ждет, а тебе надо, чтобы ждал? в (0) написано, что типа не ждет, а что стало ждать - ты нигде и не написал...
|
|||
12
Torquader
25.11.08
✎
20:11
|
Если вы запускаете что-то через WScript.Shell.Run, то согласно параметрам сценарий или ждёт окончания выполнения или нет. Но пользователь всегда может взаимодействовать с тем, что вы запустили, так как вы запустили отдельный процесс. Сделать так, чтобы клавиатура была заблокирована на момент исполнения процесса, нельзя (надо писать специальную программу, которая это делает).
Поэтому, если вы запустили сценарий в BAT-файле, и пользователь случайно нажал Ctrl+Break, то оно остановится - и так и должно быть. |
|||
13
TormozIT
гуру
25.11.08
✎
20:17
|
(12) Спасибо за развернутый ответ. Но по крайней мере тупым циклом же можно сделать
WshShell = Новый COMОбъект("WScript.Shell"); WshExec = WshShell.Exec("notepad"); Пока WshExec.Status = 0 Цикл КонецЦикла; Просто тут мы получаем полную загрузку ЦП. А хочется именно приостановки процесса 1С (такой же паузы до события завершения порожденного процесса, но без загрузки ЦП). |
|||
14
TormozIT
гуру
25.11.08
✎
20:32
|
Пока пришлось решить полутупо
Процедура ЗапуститьСкрытоеПриложениеИДождатьсяЗавершения(СтрокаЗапуска) Экспорт WshExec = WshShell.Exec(СтрокаЗапуска); Пока WshExec.Status = 0 Цикл sLEEP(10); КонецЦикла; КонецПроцедуры // ЗапуститьСкрытоеПриложениеИДождатьсяЗавершения() |
|||
15
TormozIT
гуру
25.11.08
✎
20:36
|
(14) Эх, а тут нельзя скрыть запущенное приложение =( Опять тупик.
|
|||
16
TormozIT
гуру
25.11.08
✎
21:25
|
Сделал через hstart.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |