Параллельное использование нескольких версий COM control (несколько версий платформ)

Администрирование - Системное

Краткая инструкция по использованию нескольких версий com control.

1. Открываем службу компонентов, добавляем новое приложение COM+ наименование произвольное:

 

 

2. Внутри созданного приложения выбираем компоненты и жмем Добавить новый компонент:

 

Вводим путь для платформы номер 1:
C:\Program Files\1cv8\8.3.9.2233\bin\Comcntrl.dll  - Соответственно библиотека версии 8.3.9.2033

Создастся компонент с именем "V83.COMConnector.1" Его необходимо переименовать. 

После установки НЕСКОЛЬКИХ компонентов потребуется обращаться поименно в зависимости от версии, которая будет присвоена, для этого по вновь созданному компоненту жмем правой кнопкой - псевдоним:

Задаем ему имя "V8.3.9.2033.COMConnector" (при инициализации новых объектов будем создавать их по заданному имени) - можете придумать свое.

 

В этом же окне Поле "Новый код CLSID" - копируем в блокнот нам потребуется оно чуть позднее - делаем пометку что это версия 2233, чтоб не забыть. ({3E006D3E-D351-4446-851D-D8CF792E205A} - V8.3.9.2033

В списке появится 2 компонента, старый можно удалить:

 


Создаем вторую нужную нам версию 

 


 

 

Указываем путь до второй версии:

В моем случае это 8.3.6.2041 -  C:\Program Files\1cv8\8.3.6.2041\bin\comcntr.dll

Так же задаем псевдоним, чтоб не путаться а старую версию удаляем:


 

 

Теперь самое важное:

После регистрации мы увидим, что Windows К компоненте 8.3.9 привязал более позднюю зарегистрированную:


Открываем реестр пуск - выполнить - regedit

Идем в корень реестра и нажимаем CTRL+F - Ищем CLSID компоненты, которая не соответствует, на моем примере  это - {3E006D3E-D351-4446-851D-D8CF792E205A}

 

 

 

 

На этом настройка Windows окончена, для инициализации нужной компоненты используем код вида:

COMConnector = Новый COMObject("V8.3.9.2033.COMConnector");  

Или

COMConnector = Новый COMObject("V8.3.6.2041.COMConnector");  

P.S. если вы захотите использовать 3,4,5 компонтентов - после каждой регистрации нужного компонента необходимо перепроверить все ветки реестра CLSID - Убедится что каждой компоненте адрес библиотеки соответствует

См. также

Комментарии
1. kolya_tlt kolya_tlt (kolya_tlt) 11 13.10.17 17:49 Сейчас в теме
и где же ты был пару месяцев назад?
Bukaska; DrAku1a; sisdrou; Светлый ум; TreeDogNight; +5 Ответить
2. Илья Васильев (swimdog) 476 13.10.17 22:45 Сейчас в теме
Мы перешли на 8.3.10 и выкинули все старье
4. Олег Парубец (Team leader) 8 14.10.17 20:31 Сейчас в теме
(2) И что это означает? там коннектор не используется?
5. Илья Васильев (swimdog) 476 15.10.17 12:04 Сейчас в теме
(4) Нет, там используются коннекторы одного типа. Для одной версии не нужны такие заморочки.
12. Павел Одинцов (Darklight) 27.10.17 14:08 Сейчас в теме
(5)И что, в 8.3.10 можно писать
 Новый COMObject("V8.3.COMConnector"); 

и соединяться с любым релизом 10-й версии платформы, и 8.3.10.1212, и с 8.3.10.2561 и с 8.3.10.2685...
???
3. DenisCh Гейтс (DenisCh) 14.10.17 09:03 Сейчас в теме
Это всё на сервере?
А если файловые? Или код НаКлиенте работает? Тогда на каждом компе выполнять?
Я правильно понимаю?
6. Александр Александров (qvvert) 90 15.10.17 23:15 Сейчас в теме
7. Андрей Ст (sisdrou) 24 16.10.17 09:01 Сейчас в теме
Спасибо. Жаль запоздалая статья. Уже проделан танец с бубном)
8. Андрей Акулов (DrAku1a) 1225 17.10.17 07:52 Сейчас в теме
Может, кто-то ещё всё это автоматизирует - сделает в виде обработки (которая будет автоматом регать платформу) или в виде программы-настройщика?..
9. Александр Александров (qvvert) 90 17.10.17 17:57 Сейчас в теме
(8) Режим полного лентяя))) а что можно и сделать)))
10. Павел Одинцов (Darklight) 24.10.17 10:29 Сейчас в теме
Боян (хоть и с более подробными картинками). Вот тут уже подымалась данная тема
https://infostart.ru/public/610960/
Там же и программа настройщик.
Там же, в комментариях описаны возникающие, при этом, проблемы :-(
11. Александр Александров (qvvert) 90 27.10.17 13:38 Сейчас в теме
(10)
Пардоньте, НЕ видел. Действительно те же яйца только в профиль, но добывались самостоятельно.
13. Георгий Баринберг (obsfromekb) 11 18.12.17 11:29 Сейчас в теме
Тема действительно не нова, но изложена подробно и наглядно.
От себя могу только сказать, что то, что здесь изложено, не панацея для случаев, когда в рамках одного сеанса windows происходит постоянное обращение к COM-объектам 1С разных версий. Первый вызов всегда отрабатывает корректно, но в дальнейшем могут возникать проблемы (как я понимаю Приложение COM+ попадает в кэш и системе становится не важно к какой компоненте мы обращаемся, если Приложение уже используется).
Решил так, перед каждый вызовом COM:
	Попытка
		ЗапуститьПриложение("taskkill.exe /f /im dllhost.exe",,Истина);
		КоннекторV8 = Новый COMObject("V83.COMConnector_8.3.5");
15. Murad K (karimov_m) 18.12.17 12:50 Сейчас в теме
(13)Можно попробовать посмотреть на вкладку Activation в свойствах компонента.
1. Убрать пулы
2. Выбрать опцию "Must be activated in the callers context"
14. Murad K (karimov_m) 18.12.17 12:37 Сейчас в теме
Полезно.
Надо дописать, что манипуляции с добавлением компонентов и реестром (по идее) надо делать на том же сервере, где стоит сервер приложения. Конечно же, если подразумевается создание COM-объекта на сервере..

Также интересна реализация такого приема:
На сервере поднимается 2-3 COM-соединения к базе (типа пул), далее с клиентов поступают запросы/инвоки на какие-либо действия (в той базе, по которой организовался пул) и некий алгоритм обрабатывает эти запросы клиентов к другому приложению (конфигурации) по COM. Тем самым можно организовать "прослойку" (типа API) к другой базе по COM с жестко определенным функционалом + возможная выгода в использовании лицензий (пул из трех COM-соединений может обрабатывать (в порядке очереди) много больше реальных "клиентов")
16. Павел Одинцов (Darklight) 18.12.17 13:20 Сейчас в теме
(14)Идея с пулами COM-соединений на сервере (например, в фоновых заданиях), конечно, интересная, но, покуда нет эффективного решения по обмену между сессиями - она будет интересна только для узкого круга задач, где нет необходимости в интенсивном выполнении команд. Зачастую, такие медленные задачи вполне справляются самостоятельно порождая com-соединения. А по лицензиям (что важно только для длительных задач) - тут уж сами выбирайте - либо длинная очередь медленных задач, либо ультрокороткая - но с большим расходом лицензий.
17. Murad K (karimov_m) 18.12.17 14:41 Сейчас в теме
(16)а в чем именно нужен обмен между сессиями? Синхронизацию или длительное хранение общей для всех сессий информации можно организовать в самом механизме пулов, если организовать его в виде вызовов "API пула соединений"
18. Павел Одинцов (Darklight) 18.12.17 15:06 Сейчас в теме
(17)Работа с пулами подразумевает передачу им порции данных для выполнения и возврат результата.
19. Murad K (karimov_m) 18.12.17 18:09 Сейчас в теме
(18) Работа с пулами подразумевает использование пулов, не более=)
Сама задача - организации доступ к некой ИС(1С база1) посредством сторонней ИС (1С база2) из другой системы ("1с база3" - собственно откуда идут клиенты базы "1с база1" через "1С база2") и состоит в эмуляции доступа к 1С базе 1 клиентам базы 1С база3. Только вместо прямого создания соединения из 1С база3 к 1С база1, это происходт через 1С база2 - где формируется пул. А уж какие там данные ходят и что необходимо делается - это уже отдельная логика и детали реализации.. Пулы в 1С база2 - для механизма кэширования обращений к 1С базе1. Что-то такое есть вроде в конфигурации "Интеграция" от tormozit
20. Павел Одинцов (Darklight) 18.12.17 18:24 Сейчас в теме
(19)Вот эта логика и детали организации тут и будет узким местом!
21. Murad K (karimov_m) 18.12.17 18:44 Сейчас в теме
(20)мм.. ну ок, пусть будет узким для вас)
Как говориться, смотря как приготовить;) Речь же не о гонке производительности а в целом об архитектуре. Так то если судить то вся 1С - одно большое "узкое место", быстрее как бы напрямую делать запросы к SQL серверу..
22. Павел Одинцов (Darklight) 19.12.17 09:29 Сейчас в теме
(21)Я свои доводы по поводу пулов COM-соединений привёл. Если считаете, что это годится в иных случаях - приведите свои.
23. Murad K (karimov_m) 19.12.17 11:46 Сейчас в теме
(22) какие доводы? Что они "узкое место" ? Так это зависит от задачи же. Поверьте, не все задачи являются оптимизационными.
24. Евгений Девятов (e-9) 22.12.17 16:25 Сейчас в теме
Добавил первый компонент (8.3.6.2390) успешно; ставлю второй (8.3.10.2561) - валится с ошибкой 80110802 (см. скрин), не добавляется.
Что может быть не так?
Прикрепленные файлы:
25. Евгений Девятов (e-9) 22.12.17 17:09 Сейчас в теме
26. Murad K (karimov_m) 22.12.17 17:35 Сейчас в теме
(25) теневое копирование включено на системном диске?
После того как добавил второй компонент (и после изменений соотв.ветки реестра). перезагрузите систему. Ошибка может уйти..
Оставьте свое сообщение