Имя: Пароль:
1C
 
Скрипт vbs для v83.COMConnector падает: Прекращена работа программы script host
,
0 vi0
 
19.06.16
10:18
Windows 7, 64разрядная

В vbs выполняю следующее:
Set v8 = CreateObject("v83.COMConnector")
Set Connect = v8.Connect("File=C:\test1;Usr=;Pwd=")

Появляется окно с ошибкой "Прекращена работа программы microsoft windows based script host"

Если оставить только первую строку - ошибок нет.
Если выполнять на Windows XP - ошибок нет.

В какую сторону копать?
1 Звездец
 
19.06.16
10:23
(0) предлагаю лог системы посмотреть для начала
2 vi0
 
19.06.16
10:24
(1) какой именно лог и где его смотреть?
3 vi0
 
19.06.16
11:10
вот что написано в \Журналы Windows\Приложения

Путь сбойного приложения: C:\Windows\System32\WScript.exe
Путь сбойного модуля: C:\Program Files\1cv8\8.3.5.1517\bin\filedb.dll

Подозреваю, что это связано со следующими событиями:
1) До этого создание COMConnector из скрипта вызывало ошибку "Невозможно создание объекта контейнером activex v83.comconnector". Хотя его создание из программного кода 1С выполнялось корректно.
2) Я установил 1CEnterprise 8 Server (x86-64).msi. После этого эта ошибка снялась, но появилась новая - см топик.

Журнал Виндовс как раз показывает на каталог с 64 приложениями (Program Files), а конкретно на библиотеку filedb.dll

Как эту информацию можно использовать?
4 vi0
 
19.06.16
11:35
Вероятно дело в том, что WScript 32-разрядный
Если запускать явно C:\Windows\SysWOW64\WScript.exe то ошибки нет. Но что-то мне эта тема не нравится.

Почему 1С создает 32x COMConnector, а у скрипта ошибка "Невозможно создание объекта контейнером activex"?
5 hhhh
 
19.06.16
12:07
(4) ну, глупо ожидать что 32х разрядная программа вдруг выдаст 64х разрядный скрипт.
6 vi0
 
19.06.16
12:13
(5) как скрипт может быть 64разрядным?

Вопрос такой на данный момент:
Как сделать, чтобы операционка создавала COMConnector 32разрядный при запуске скрипта, также как это делает 1С если из ее програмного кода создавать COMConnector?
7 vi0
 
19.06.16
14:56
думал, может v83.Application использовать, а не v83.COMConnector, но там тоже засада - если уже открыт к.н. сеанс в файловой базе, то второй должен быть той же версии, иначе ошибка
а v83.Application явно версию 1с задавать не позволяет
8 Звездец
 
19.06.16
14:59
И чем тебе это не нравится? Хочешь универсальности, то сначала определи битность, а потом запусти нужный(4)
9 vi0
 
19.06.16
15:01
(8) не нравится тем, что это будет работать на удаленных точках и должно работать автономно надежно
ничего слетать "само" не должно
ну и настойки минимальные первоначальные
10 Звездец
 
19.06.16
15:27
Так и не надо никаких настроек. Систему определил и нужный дергнул(9)
11 Beretta
 
19.06.16
15:29
Есть подозрение, что все это можно на том же 1с и написать
12 Звездец
 
19.06.16
15:29
Так проблемы не будет скорее всего, неинтересно(11)
13 vi0
 
19.06.16
16:34
(11) нужно прозрачно для пользователя делать
вот мои еще мои попытки WshShell. Запустить 1с в неотображаемом окне
14 Звездец
 
19.06.16
16:37
(13) что значит прозрачно для пользователя? чем фоновое задание не устраивает?
15 Звездец
 
19.06.16
16:39
(13) окно не отображаемое, и будут пользователь комп выключать пока процесс не завершился
16 vi0
 
19.06.16
16:42
(14) > что значит прозрачно для пользователя?
нужно минимизировать раздражители для пользователя в виде окон

> чем фоновое задание не устраивает?
клиент-серверная база в клиентском контексте должна запустить ряд запусков файловой базы
если использовать фоновые задания то они будут на сервере
17 Звездец
 
19.06.16
16:44
(16) файловые базы где лежат?
18 vi0
 
19.06.16
16:45
(17) локально
19 vi0
 
19.06.16
16:46
пока что все больше склоняюсь к запуску командной строкой
смущает здесь открытие заставки 1с и сложность с передачей результата запуска завершенного процесса 1с для последующего процесса
Например, что РИБ пришел с обновлением конфигурации и нужно запустить кофигуратор с параметром UpdConfig
20 Звездец
 
19.06.16
16:50
(19) так заморачиваться для обновления риб?
21 vi0
 
19.06.16
16:51
(20) а какие альтернативы? БСП? пока не рассматриваю
22 Звездец
 
19.06.16
16:53
(21) ты так часто РИБ обновляешь? не проще ли подключиться да щелкнуть мышкой. Ну или в БСП посмотреть как там сделана выдача сообщения и запуск обновления
23 vi0
 
19.06.16
18:11
(22) да, пожалуй аналог БСП попробую -
запускать файловую базу и полностью ей управление передавать:
пришло обновление - 1с закрывается и при закрытии запускает скрипт, который обновит конфигурацию и опять 1с запустит для продолжения обмена

если бы с ComConnector не было заморочек, было бы веселее, конечно
24 vi0
 
20.06.16
05:41
(22) подключиться и мышкой точно не вариант
конечных узлов большое количество
25 hhhh
 
20.06.16
06:29
(24) пользуйся планировщиком windows. Вещь. Подсовываешь ему расписание и bat-файл, он тебе всё обновляет в режиме полной скрытности от пользователя.
26 hhhh
 
20.06.16
06:47
в бат-файле строчка

"C:\Program Files\1cv82\8.2.19.106\bin\1cv8.exe" DESIGNER /F"D:\bases\buh20" /N"адм" /P111 /UpdateDBCfg
27 vi0
 
20.06.16
08:48
(25) нужна реализация с минимальным вмешательством администратора
28 vi0
 
20.06.16
08:50
вот здесь Книга знаний: V8: Программное создание БД на сервере приложений нашел ответ на мой вопрос (4) "Почему 1С создает 32x COMConnector, а у скрипта ошибка "Невозможно создание объекта контейнером activex"?"

ответ следующий:
2) Дальнейшее "гугленье" показало, что Windows Script Host, имеющийся в Win7 64 не создает 32-х разрядные COM объекты.
3) Скачиваем 32-х разрядный WSH с сайта http://www.microsoft.com/download/en/details.aspx?id=8247 от Win XP. (Возможно достаточно взять WScript.exe от 32-х битной Win7, но такой не нашлось поблизости)
4) Распаковываем (например WinRAR-ом) в определенную папку (у меня c:\WScript32\)
5) Запускаем скрипт п.1
C:\WScript32\WScript.exe c:\scripts\Create1C.vbs
29 MM
 
20.06.16
09:23
А чем решение из (4) плохо? В 64-битных системах есть 2 WScript32, в C:\Windows\SysWOW64 хранятся компоненты системы для совместимости с 32-битными приложениями.
(28) Естественно, 64-битное приложение не может загрузить к себе в адресное пространство 32-битные DLL.
(26) Можно повесить в скриптик, который дождётся завершения предприятия и произведёт обновление. А его запуск может быть выполнен перед выходом из предприятия, когда надо обновиться.
30 vi0
 
20.06.16
09:38
(29) > Естественно, 64-битное приложение не может загрузить к себе в адресное пространство 32-битные DLL.
Ты считаешь, что это приложение 64-битное: C:\Windows\System32\wscript.exe ?
31 MM
 
20.06.16
09:49
В C:\Windows\System32 лежит 64х битное, если кто стороннее не положил, в C:\Windows\SysWOW64 - 32х битное для совместимости.
32-приложения, автоматически перенаправляются в C:\Windows\SysWOW64, если, конечно, они не вызывают специальные функции, чтобы отключить редирект.
32 vi0
 
22.06.16
17:29
(31) весело
33 hhhh
 
22.06.16
17:34
(27) а где тут вмешательство администратора. У меня тут такой обмен уже 4 года крутится без никакого администратора. Даже все забыли, что он есть.
34 vi0
 
22.06.16
21:16
(33) я имею введу предварительные настройки на конечных узлах
единственное, если рулить планировщиком тоже скриптами
35 Барматолог
 
23.06.16
12:13
(0) Платформу патчили unipatch-ем (backbas.dll)?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший