|
Дождаться запуска 1С | ☑ | ||
---|---|---|---|---|
0
prostovityaz
01.04.16
✎
22:07
|
Бобра всем!
Я уже наверное сплю... Есть внешняя обработка. Конфёшку менять низя. В обработке, есть строка запуска 1С, что-то типа: ЗапуститьПриложение(СтрокаЗапуска,,Ложь) Внимание вопрос: Как дождаться успешного запуска 1Сины, и потом продолжить выполнение кода? Вариант с таймером отпадает, т.к. время запуска всегда разное. Вариант загнять в цикл запись-чтение выгрузки ЖР на предмет события "Сеанс. Начало" гнустный. какие идеи есть? |
|||
1
zalexey
01.04.16
✎
22:17
|
Ты не поверишь :)
ЗапуститьПриложение(<СтрокаКоманды>, <ТекущийКаталог>, <ДождатьсяЗавершения>, <КодВозврата>) Параметры: <СтрокаКоманды> (обязательный) Тип: Строка. Командная строка для запуска приложения либо имя файла, ассоциированного с некоторым приложением. <ТекущийКаталог> (необязательный) Тип: Строка. Задает текущий каталог запускаемого приложения. В режиме веб-клиента игнорируется. <ДождатьсяЗавершения> (необязательный) Тип: Булево. Истина - дожидаться завершения запущенного приложения перед продолжением работы. |
|||
2
prostovityaz
01.04.16
✎
22:26
|
(1) Мне не нужно дожидаться завершения 1С! В том то и дело!
|
|||
3
Записьдампа
01.04.16
✎
22:33
|
(0) И что же такое "успешный запуск 1Сины"?
Факт, что к тебе вернулось управление после ЗапуститьПриложение говорит о том, что процесс успешно был запущен. |
|||
4
prostovityaz
01.04.16
✎
22:38
|
(3) "что процесс успешно был запущен", наверное, Вы хотели написать "завершен"?
в 3 параметре значение "Истина" отвечает за факт завершения запущеного прилоежения. А мне не нужно дожидаться, пока в этом экземпляре выполнится код, и вернет мне факт управления. |
|||
5
prostovityaz
01.04.16
✎
22:40
|
(3) успешный запуск = под пользователем, который указан в параметре "СтрокаЗапуска" был выполнен вход в 1С.
|
|||
6
prostovityaz
01.04.16
✎
22:42
|
грубо говоря, нужно НЕ запускать следующий экземляр приложения 1С, пока не откроется предыдущий...
как-то так |
|||
7
Записьдампа
01.04.16
✎
22:44
|
(4) Еще раз и медленно.
1) Windows - многозадачная система. Линукс, впрочем, тоже. 2) ЗапуститьПриложение с третьим параметром равным Ложь стартует приложение и возвращает управление в следующую строчку сразу после запуска. Целевое приложение успешно запущено и выполняется параллельно. 3) ЗапуститьПриложение с третьим параметром равным Истина стартует приложение и возвращает управление в следующую строчку только после того целевое приложение завершится. Какого тебе надо? |
|||
8
Записьдампа
01.04.16
✎
22:45
|
(6) что такое "откроется"?
|
|||
9
prostovityaz
01.04.16
✎
22:48
|
(7) намба 2. но след строка чтобы не выполнялась до тех пор, пока предыдущая строка, ЗапуститьПриложении, не откроется и не будет выполнен вход в 1С.
|
|||
10
Записьдампа
01.04.16
✎
22:49
|
(9) Подбор пароля брутфорсом что-ли пишешь? =)
|
|||
11
prostovityaz
01.04.16
✎
22:49
|
(10) гг, нет :)
|
|||
12
prostovityaz
01.04.16
✎
22:49
|
(10) пароли у мну уже есть)))
|
|||
13
Записьдампа
01.04.16
✎
22:52
|
Нет такого события "откроется". Целевая 1С уже запущена и ковыряется внутри себя в установке параметров сеансов, перед началом системы и т.п. Если ты хочешь ловить момент "появления окошка", тебе придется сообщать об этом из целевой 1С каким-либо образом.
|
|||
14
prostovityaz
01.04.16
✎
22:56
|
(13) ладно, спасибо! пошел спать. возможно завтра проянится что-либо. или у кого-то ещё появятся идеи.
|
|||
15
zalexey
01.04.16
✎
23:10
|
(14) объясни лучше для чего это нужно, может другие варианты есть :)
|
|||
16
pessok
01.04.16
✎
23:43
|
(0)
Shell = Новый COMОбъект("WScript.Shell"); ПутьКПриложению = КаталогПрограммы()+"1cv8.exe"; Путь = СтрокаСоединения(ТекСтрБаза.Сервер, ТекСтрБаза.База, ТекСтрБаза.ПутьКБазе, ТекСтрБаза.ИмяПользователя, ТекСтрБаза.Пароль); ЛогФайл = "/Out"+Символ(34)+КаталогЛогов+"\"+ТекСтрБаза.ИмяБазы+".log"+Символ(34)+ "-NoT_runcate "; СтрокаДействия = Символ(34)+ПутьКПриложению+Символ(34)+" DESIGNER "+?(Логировать, ЛогФайл, +" ")+Путь+Действие+Символ(34)+ВрПутьКОбновлению+Символ(34)+" /UpdateDBCfg"; PID = Shell.Exec(СтрокаДействия); Пока PID.Status <> 0 Цикл Состояние("Терпи, казак!"); КонецЦикла; Предупреждение("ЯСделяль!"); |
|||
17
pessok
01.04.16
✎
23:44
|
(13) просто можно использовать шелл
(14) много для чего |
|||
18
pessok
01.04.16
✎
23:52
|
+(16) чета я плохо тему прочитал. у меня тут ожидает именно завершения работы pidа. Использовалось для многопоточного обновления баз
|
|||
19
mistеr
02.04.16
✎
10:35
|
(9) >пока предыдущая строка, ЗапуститьПриложении, не откроется и не будет выполнен вход в 1С
А какой момент считается "входом в 1С"? |
|||
20
prostovityaz
04.04.16
✎
09:40
|
(19)
ЗапуститьПриложение(СтрокаЗапуска,,Ложь) под пользователем, который указан в параметре "СтрокаЗапуска" был выполнен вход в 1С. мне это необходимо, для: у пользователя ДО запуска не было определнных прав. Я ему их добавляю. запустилась 1С. вход под этим юзером выполнен. далее я эти права отбираю у этого юзера. иду дальше по другому пользователю, выполнить всё тоже самое что и с предыдущим. |
|||
21
vde69
модератор
04.04.16
✎
09:45
|
используй COM соединение...
|
|||
22
prostovityaz
04.04.16
✎
09:48
|
Процедура ОсновныеДействияФормыЗапуск(Кнопка)
Для каждого строка из РезультатИзЖР цикл если строка.Запуск = истина тогда РольЗапускаОбработок = Метаданные.Роли.ПравоЗапускаВнешнихОтчетовИОбработок; ПользовательИБ=ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(строка.УникIDПользователя); Если ПользовательИБ.Роли.Содержит(РольЗапускаОбработок) = Ложь тогда НеБылоПравЗапуска=Истина; ДобавлениеПравНаЗапускВнешнихОбработок(ПользовательИБ); КонецЕсли; ГдеИскать = КаталогПрограммы(); Пароль = УстановкаНовогоПароля(ПользовательИБ); СтрокаИБ = Строка(СтрокаСоединенияИнформационнойБазы()); если Найти(СтрокаИБ,"Srvr")=1 тогда СтрокаЗапуска=ГдеИскать+"1cv8.exe"+" /s"+символ(34)+НСтр(СтрокаИБ,"Srvr")+"\"+НСтр(СтрокаИБ,"Ref")+символ(34)+" /N"+Символ(34)+ПользовательИБ.Имя+Символ(34)+ " /P"+ Символ(34)+Пароль+Символ(34)+" /execute "+Символ(34)+ИспользуемоеИмяФайла+Символ(34); иначе СтрокаЗапуска=ГдеИскать+"1cv8.exe"+" /F"+Символ(34) +НСтр(СтрокаИБ,"File")+Символ(34)+" /N"+Символ(34)+ПользовательИБ.Имя+Символ(34)+ " /P"+ Символ(34)+Пароль+Символ(34)+" /execute "+Символ(34)+ИспользуемоеИмяФайла+Символ(34); конецесли; Если ЭлементыФормы.ЖдатьЗавершения = истина тогда ЗапуститьПриложение(СтрокаЗапуска,,Истина); иначе ЗапуститьПриложение(СтрокаЗапуска,,Ложь); //тут нужно написать какую-то хрень, чтобы дождаться успешного запуска 1С под пользователем ПользовательИБ.Имя, и затем выйти из Если КонецЕсли; Если НеБылоПравЗапуска = Истина тогда УдалениеПравНаЗапускВнешнихОбработок(ПользовательИБ); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
23
patapum
04.04.16
✎
10:01
|
(0) Запускать 1с с ключом запуска внешней обработки. Внешней обработкой создавать файл. Для определения успешного запуска мониторить его наличие.
|
|||
24
hhhh
04.04.16
✎
10:02
|
(22) какая цель этих странных манипуляций?
|
|||
25
lEvGl
гуру
04.04.16
✎
10:03
|
что надо сделать? если данные перекинуть то можно через ком подключаться как в (21), а если надо именно приложение запустить то можно опять же ком, только создавать application, строка, которая запускает КОМприложение не пустит указатель дальше, пока приложение не запуститься, если правильно помню
|
|||
26
prostovityaz
04.04.16
✎
10:03
|
(23) нет более гуманного средства определения?
спасибо, этот вариант есть у меня в списке как "оптимальный" запасной. |
|||
27
lEvGl
гуру
04.04.16
✎
10:06
|
все как всегда зависит от цели, а так ваши действия пока выглядят странно, скорее всего приложение вообще запускать не надо
|
|||
28
mistеr
04.04.16
✎
10:14
|
(26) С учетом дебилизма всей схемы вопрос гуманности отходит на десятый план.
|
|||
29
prostovityaz
04.04.16
✎
10:18
|
(28) задача есть, я её выполняю. вопрос о дебилизме оставьте при себе :)
|
|||
30
Записьдампа
04.04.16
✎
10:34
|
(29) Успехов вам в удалении гланд автогеном.
|
|||
31
Cyberhawk
04.04.16
✎
10:39
|
"Как дождаться успешного запуска 1Сины, и потом продолжить выполнение кода? "
"какие идеи есть?" Идея номер 1: определиться, что будешь делать, если главное окно приложения 1С будет до бесконечности висеть с модальным диалогом |
|||
32
prostovityaz
04.04.16
✎
11:11
|
(31) мне пофиг что там после открытия 1С делается.
пусть висит. вручную потом закрою. |
|||
33
Cyberhawk
04.04.16
✎
11:16
|
(32) А как тогда поймешь, что запуск успешен?
|
|||
34
prostovityaz
04.04.16
✎
11:25
|
(33) вход под пользователем выполнился - мне этого достаточно. а то, что после входа выпадают модальные окна, мне пофиг.
|
|||
35
hhhh
04.04.16
✎
11:29
|
(34) какой вообще смысл в этой фигне?
УдалениеПравНаЗапускВнешнихОбработок(ПользовательИБ); права удалятся всё равно только в следующем сеансе. Зачем торопиться их удалять, проверять, запустилось или нет? |
|||
36
Aleksey
04.04.16
✎
11:38
|
Не использовать стартер. А юзать нужный exe файл
|
|||
37
prostovityaz
04.04.16
✎
11:38
|
(35) почему права удалятся только в след сеансе?
обработку под полными правами открываю в одном сеансе. жму запустить, далее мне нужно их дать пользователю, которого я выбрал, запусить 1С, чтобы открылась обработка (права даю на открытие внешних обработок), затем убрать права этому пользователю и так дальше по остальным пользователем. |
|||
38
prostovityaz
04.04.16
✎
11:39
|
(36) я стартер не запускаю, а обращаюсь к файлу "1cv8.exe"
|
|||
39
Aleksey
04.04.16
✎
11:40
|
(38) а если через start с ключем /wait?
|
|||
40
Smallrat
04.04.16
✎
11:41
|
(0) Запускаешь 1С, через 30 секунд подключаешься по COM и смотришь список активных пользователей: ПолучитьСеансыИнформационнойБазы() - если твой пользователь там, значит запустилось, если нет - ждем еще, если после n ожиданий не появился, значит фейл.
ну до кучи можно проверить до запуска 1С что пользователь не залогинен. |
|||
41
Aleksey
04.04.16
✎
11:43
|
start "" /wait "C:\Program Files (x86)\... путь к 1cv8.exe
|
|||
42
Карупян
04.04.16
✎
11:43
|
(39) wait озночает ожидания завершения процесса
|
|||
43
prostovityaz
04.04.16
✎
11:43
|
(39) ключ "wait" это "Запуск приложения с ожиданием его завершения." Мне это не нужно.
|
|||
44
hhhh
04.04.16
✎
11:43
|
(37) права во время работы храняися в кеше. Если убираешь права, наверно перезапустить еще раз надо. А может и не надо.
|
|||
45
prostovityaz
04.04.16
✎
11:44
|
(40) спасибо, попробую
|
|||
46
Aleksey
04.04.16
✎
11:44
|
||||
47
prostovityaz
04.04.16
✎
11:46
|
я думаю, вариантов достаточно, чтобы решить мою задачу.
Всем спасибо за участие. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |