Имя: Пароль:
1C
1С v8
Дождаться запуска 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
я думаю, вариантов достаточно, чтобы решить мою задачу.
Всем спасибо за участие.