|
Как заставить скрипт подождать завершения 1cv8.exe? | ☑ | ||
|---|---|---|---|---|
|
0
AlStorm
18.08.10
✎
10:35
|
Всем привет.
Пишу автоматизированный обмен. Если у меня на узел поступает файл с изменениями конфигурации, то обмен делается вот так: 1. Запускается просто 1с Предприятие и обновляются данные конфы 2. Запускается конфигуратор и обновляется конфа базы данных 3. Снова режим предприятия, обновляются данные базы Вот так. Но в батнике учавствует стартер 1cestart.exe, которая запускает сама платформу. Так как батник ждет ее завершения (а завершается она сама практически сразу), то все 3 процесса 1cv8.exe начинают молотить практически одновременно... Можно заставить не выгружаться 1cestart из памяти, пока не вырубится ее дочерний процесс? PS Запускать напрямую 1cv8.exe не предлагать... |
|||
|
1
AlStorm
18.08.10
✎
10:36
|
Или предложите свое решение, я тут просто голову уже сломал...
|
|||
|
2
luns
18.08.10
✎
10:38
|
так есть же в типовых механизм.
|
|||
|
3
AlStorm
18.08.10
✎
10:39
|
(2)
Какой? |
|||
|
4
smaharbA
18.08.10
✎
10:40
|
1cestart.exe - это чо и нафига ?
|
|||
|
5
zGainer
18.08.10
✎
10:41
|
(1) У меня получают изменения (из одноэс), обновляются, если есть изменения конфы то:
ПараметрыКоманднойСтроки = "CONFIG /F " + ПутьКБД + " /N Логин /P Пароль /UpdateDBCfg"; ЗавершитьРаботуСистемы(Истина, Истина, ПараметрыКоманднойСтроки); |
|||
|
6
smaharbA
18.08.10
✎
10:41
|
как сделать ожидание, даже при наличии (4) могу сказать, но вперед ответь на (4)
|
|||
|
7
AlStorm
18.08.10
✎
10:42
|
(4)
Йопт. Это стартер для запуска 1cv8.exe. Если на компе установлено больше одной версии платформ (дерево каталогов для 8.2 видел?), то запускает самую последнюю |
|||
|
8
luns
18.08.10
✎
10:42
|
(3) автономное решение есть подсистема.
в упп и в утт для обменов риб. там и скрипты генерятся и все такое. |
|||
|
9
AlStorm
18.08.10
✎
10:43
|
(5)
Ай молодца. Только ко мне не применимо. У меня все автоматом и пулеметом |
|||
|
10
AlStorm
18.08.10
✎
10:44
|
(8)
А в КА есть? |
|||
|
11
bse
18.08.10
✎
10:44
|
а ты не пользуйся 1cestart.exe
|
|||
|
12
zGainer
18.08.10
✎
10:44
|
(9) Аналогично, автоматом
|
|||
|
13
AlStorm
18.08.10
✎
10:44
|
(11)
А чем мне пользоваться? |
|||
|
14
AlStorm
18.08.10
✎
10:45
|
(12)
Ну-ка распиши подробней. Только без участия пользователей |
|||
|
15
luns
18.08.10
✎
10:46
|
а еще есть такая штука: http://infostart.ru/public/63562/
я ее допилил под себя и юзаю. очень удобно для обменов. |
|||
|
16
luns
18.08.10
✎
10:46
|
(10) насчет КА не знаю. я ее только один раз юзал и эту часть (обмены) не смотрел. но думаю есть.
|
|||
|
17
Живой Ископаемый
18.08.10
✎
10:47
|
откройте для себя утилиты командной строки:
Запуск указанной программы или команды в отдельном окне. START ["заголовок"] [/Dпуть] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] [/LOW | /NORMAL | /HIGH | /REALTIME| /ABOVENORMAL | /BELOWNORMAL] [/WAIT] [/B] [команда/программа] [параметры] "заголовок" Заголовок окна. путь Рабочий каталог. B Запуск приложения без создания нового окна с отключением обработки сочетания клавиш ^C. Если приложение не обрабатывает сочетание клавиш ^C самостоятельно, единственным способом его прерывания является использование сочетания клавиш ^Break. I Новой средой станет исходная среда, переданная cmd.exe, а не текущая среда. MIN Запуск команды/программы в свернутом окне. MAX Запуск команды/программы в развернутом окне. SEPARATE Запуск 16-разрядной программы Windows в отдельной области памяти. SHARED Запуск 16-разрядной программы Windows в общей области памяти. LOW Запуск приложения с приоритетом IDLE. NORMAL Запуск приложения с приоритетом NORMAL. HIGH Запуск приложения с приоритетом HIGH. REALTIME Запуск приложения с приоритетом REALTIME. WAIT Запуск приложения с ожиданием его завершения. ================ |
|||
|
18
Живой Ископаемый
18.08.10
✎
10:48
|
ладно, понял, не в тему. :)
|
|||
|
19
zGainer
18.08.10
✎
10:48
|
(14) А ну пользователь одну кнопку таки жмет, каюсь. Интернет модемный на перифериях.
|
|||
|
20
AlStorm
18.08.10
✎
10:48
|
(17)
и что? То, что я написал в (0) прочитали? |
|||
|
21
Живой Ископаемый
18.08.10
✎
10:49
|
2(20) не прочитал, извини. :)
|
|||
|
22
AlStorm
18.08.10
✎
10:50
|
(8)
А как эта подсистема может мне помочь? Что там есть? |
|||
|
23
AlStorm
18.08.10
✎
10:56
|
У самого стартера 1cestart.exe параметры запуска есть?
|
|||
|
24
luns
18.08.10
✎
11:56
|
(22) там можно посмотреть как правильно делать скрипт обновления.
|
|||
|
25
Stepa86
18.08.10
✎
12:06
|
загрузку дт делаю вот так, думаю сможешь под себя модифицировать... это файл .vbs
dim CurrentPath Set WshShell=CreateObject("WScript.Shell") Const PathDT = "e:\Temp\1Cv8.dt" Const InfoBaseConnectionString = "/FC:\Users\a.stepanov\Documents\InfoBase20" Const PathProgram = "C:\Program Files\1cv82\8.2.12.75\bin\1cv8.exe" Const CurrentPath ="d:\work\Проекты\ВКТ\ОбновлениеЧерезСкрипт\" WshShell.Run """" & PathProgram & """ ENTERPRISE /DisableStartupMessages " & InfoBaseConnectionString &" /CЗавершитьРаботуПользователей /UCКодРазрешения /Out" & CurrentPath & "\ВыгонялкаПользователей.txt",1,1 WshShell.Popup "Завершена блокировка базы",10, "Завершена блокировка базы", 1 WshShell.Run """" & PathProgram & """ DESIGNER " & InfoBaseConnectionString &" /RestoreIB" & PathDT & " /Out" & CurrentPath & "\ЛогЗагрузкаДТ.txt /UCКодРазрешения /Visible",1,1 WshShell.Popup "Загружен dt",10, "Загружен dt", 1 WshShell.Run """" & PathProgram & """ ENTERPRISE " & InfoBaseConnectionString &" /CРазрешитьРаботуПользователей /UCКодРазрешения /Out" & CurrentPath & "\ВгонялкаПользователей.txt",1,1 WshShell.Popup "Снятие блокировки базы завершено",10, "Снятие блокировки базы завершено", 1 |
|||
|
26
Stepa86
18.08.10
✎
12:07
|
+(25) без "dim CurrentPath" тока
|
|||
|
27
rcs
18.08.10
✎
13:24
|
(0) Можно после запуска 1cestart.exe c определенной периодичностью проверять наличие процесса 1cv8.exe, если он исчез, идем дальше. Вот пример кода на vbs, который выводит список процессов:
Set ServicesSet = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.") Set Items = ServicesSet.ExecQuery("Select * from Win32_Process") SumStr = "" For Each Item in Items strUser = "" strDomain = "" RetVal = Item.GetOwner(strUser,strDomain) SumStr = SumStr & Item.Name & " " & Item.Handle & " " & strUser & " " & strDomain & vbCrLf Next MsgBox SumStr |
|||
|
28
AlStorm
18.08.10
✎
16:14
|
(27)
Можно, а если на компе 2 базы, и с обеими пользователь работает? |
|||
|
29
AlStorm
18.08.10
✎
16:36
|
Короче,буду ковырять вот это: http://msdn.microsoft.com/en-us/library/system.diagnostics.process_members.aspx
ЗЫ Разработал службу для автоматического обмена абсолютно без участия пользователей и без расписания. Расписание нужно только на сервере. Кароч, буду прямо из службы глядеть, какие процессы пускает этот 1cestart и ждать их завершения.. |
|||
|
30
rcs
18.08.10
✎
18:45
|
(28) автообмен запускаешь от имени специально созданного пользователя windows, потом фильтруешь процессы по этому пользователю
|
|||
|
31
1C-Nick
18.08.10
✎
19:04
|
(29) а использовать 1cestart это обязательное условие?
|
|||
|
32
1C-Nick
18.08.10
✎
19:04
|
можно же в самом скрипте запускать сразу исполняемый файл 8-ки и получать идентификатор процесса, а потом ожидать его завершения
|
|||
|
33
Ковычки
18.08.10
✎
21:58
|
все решается в пакетнике.
(7) балавство это для недоразвитых |
|||
|
34
Ковычки
18.08.10
✎
21:59
|
если надо, пеши тут
|
|||
|
35
AlStorm
19.08.10
✎
02:35
|
(31)(32)(33)
Я ж написал в (0) "Запускать напрямую 1cv8.exe не предлагать" Я не хочу менять батник каждый раз как обновится платформа. А 8.2 это очень часто делает. |
|||
|
36
smaharbA
19.08.10
✎
07:36
|
автор ты пейсатель ?
|
|||
|
37
AlStorm
19.08.10
✎
07:40
|
System.Diagnostics.Process[] AllPROCESSES;
System.Diagnostics.Process MyProcess = new System.Diagnostics.Process(); // ловим начало процесса DateTime TimePr = DateTime.Now; bool Find1c8 = false; while (!Find1c8) { // делаем паузу: ждем, когда появится новый процесс System.Threading.Thread.Sleep(500); AllPROCESSES = System.Diagnostics.Process.GetProcesses(); foreach (System.Diagnostics.Process x in AllPROCESSES) { if (x.ProcessName.ToString().Trim() == "1cv8" && x.StartTime >= TimePr) { MessageBox.Show("Появился процесс 1с 8!!"); Find1c8 = true; MyProcess = x; } } } // ждем, пока процесс отработает MyProcess.WaitForExit(); // все!!! MessageBox.Show("Процесс отработал!!!"); |
|||
|
38
AlStorm
19.08.10
✎
07:41
|
Ну вот как-то так
|
|||
|
39
AlStorm
19.08.10
✎
07:41
|
Только еще таймауты добавлю.. а то мало ли что
|
|||
|
40
smaharbA
19.08.10
✎
07:43
|
все решается в пакетнике !
|
|||
|
41
AlStorm
19.08.10
✎
07:44
|
(40)
Как? Давай скажи. Только по шагам |
|||
|
42
smaharbA
19.08.10
✎
08:26
|
(41) примерчик
(и ты бы первоначальный текст пакетника показал, а не умничал бы)
|
|||
|
43
Jolly Roger
19.08.10
✎
08:38
|
тест
|
|||
|
44
AlStorm
19.08.10
✎
08:40
|
(42)
мммм... я в бейсик скрипте не очень. |
|||
|
45
AlStorm
19.08.10
✎
08:41
|
Но идею понял. У меня круче:)
|
|||
|
46
smaharbA
19.08.10
✎
08:43
|
(44) причем тут бейсик ?! - это обыкновенный пакетный файл TEST.BAT !
(45) в (42) по любому "круче" - ибо только коммандная строка и ничего ))) |
|||
|
47
AlStorm
19.08.10
✎
09:00
|
(46)
Объясни, что там происходит? Я не шарю. Я просто написал вин-службу, которая очень все упрощает для меня. Вот представь. Филиал, на нем 3 базы, работают люди. Что служба делает: 1. Видит, что появился новый файл обмена на фтп ресурсе 2. Копирует его в папку обмена для 1с 3. Распаковывает и определяет, есть ли в этом файле изменения конфигурации 4. Загружается файл обмена в режиме предприятия. Запускает через 1cestart.exe. Ждет окончания загрузки. 5. Если есть изменения (см п. 3), то завершает работу всех пользователей именно этой базы. Запускает обновление конфы базы данных. Также с помощью 1cestart.exe, ждет окончания. После этого повторяет п. 4. 6. Также просматривает наличие обратного файла с филиала в центр, и если он обнаруживается, выкладывает на фтп. |
|||
|
48
smaharbA
19.08.10
✎
10:32
|
(47) тебе надо было запустить адинес через стартер, но пакетник не ждет
модифицировав (42) можно по цепочке отследить все вложенные дочерние процессы и соответственно дождаться их (в пакетнике так же реализуемо) и служба не нужна |
|||
|
49
AlStorm
19.08.10
✎
10:40
|
(48)
можно и так. Но служба у меня на самом деле для других целей. Основное назначение - в том, чтобы в филиалах данные загружались (и конфа тоже) максимум через минуты три после выгрузки в центре без участия пользователей. Даже если обмен идет вне расписания или запущен "от руки". А то, что ты привел - круто, не знал, что такие возможности вложены в бат-файлы. С дочерними процессами я очень не хотел заморачиваться, так как если внимательно посмотреть в диспетчере задач, как запускается восьмерка, то там между 1cestart.exe и 1cv8.exe быстро проскакивает еще и 1cv8c.exe - это вообще тонкий клиент, чего он запускается, я хз. И не факт, что 1cv8.exe - дочерний по отношению к 1cstart.exe. Короче, одинесовцы нас круто под***али нас со своим стартером. То, что делалось раньше одной строкой в батнике делается теперь такой колбасой, что у тебя в (42) |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |