1с ошибка получения объекта com 2147024891 0x80070005 отказано в доступе
Значит дело было так. Появилась необходимость подключаться к базам по com соединению, для анализа тамошних объектов метаданных. Проблема оказалась в том, что базы могли работать на разных версиях 1С. Пошел в интернет, искал, читал, но все фигня, в оновном все предлагают держать базы на одной версии, что для меня было невозможным.
Кроме, вот этой статьи. Огромное спасибо автору (Леонид Кириенко) и zakiap
Тут уже интересней, но есть пару минусов
1) 1С должна работать от имени учетки с админскими правами.
2) "Варварское" поведение по отношению dllhost.exe :)
3) Могут возникнуть проблемы при одновременном обращении к базам на разных версиях.
Но, как оказалось, самым для меня полезным, оказалась не сама статья, а один из комментариев к ней.
Если присмотрется, то видно, что у него создано несколько оберток для разных версий. Увидев этот коммент, я тут же обрадовался, думал сейчас все расскажут. Но не тут то было, показать, показал, а рассказать забыл)
Инструкция
1. Идем "Панель управления" - "Администрирование" - "Службы компонентов"
2. В оснастке служб компонентов, "Службы компонентов" - "Компьютеры" - "Мой компьютер" - "Приложения COM+"
3. Создаем новое приложение, правой кнопкой по "Приложения COM+" - "Создать" - "Приложение"
4. Выбираем "Создать новое приложение", называем например "1cv8", тип выбираем "Библиотечное приложение"
должно полчуить так
5. Раскрываем "1cv8", правой кнопкой по "Компоненты" - "Создать" - "Компонент".
6. Выбираем вариант "Установка новых компонентов", находим нашу библиотеку comcntr.dll
Находится она в катлоге BIN установленной платформы, у меня например путь такой
"C:\Program Files (x86)\1cv8\8.3.10.2168\bin\comcntr.dll"
должны получить следующую картину
7. Правой кнопкой по "V83.COMConnector.1" - "Псевдоним. ", меняем наименование с "CopyOf.V83.COMConnector.1" на "V83.COMConnector_8.3.9.2033". Данное действие проделываем для всех нужных версий платформ.
8. Открываем "regedit" через пуск или команду "Выполнить", нажимаем F3 и указываем для поиска строку с наименованием созданой нами обертки, например "V83.COMConnector_8.3.9.2033". Или использум для поиска CLSID созданной обертки.
9. Ищем значение в ветке "HKEY_LOCAL_MACHINE" у меня путь такой HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\\ выглядеть должно так
В ветке "InprocServer32" меняем значение у меня, "C:\Program Files (x86)\1cv8\8.3.10.2168\bin\comcntr.dll" на путь к нужной версии длл, в данном случае "C:\Program Files (x86)\1cv8\8.3.9.2033\bin\comcntr.dll".
Данное дейстие проделываем для всех созданных оберток.
Все готово) Для подключения к конкретной версии базы, в 1С теперь нужно использовать следующую конструкцию
В файлах утилита, которая выполнит все эти действия автоматически. Подходит для тех у кого 1С лежит в каталоге
"C:\Program Files (x86)\1cv8". У кого что то отличается, вот ссылка на GitHub . Запустить утилиту нужно от имени администратора. Надеюсь данный материал будет вам полезен)
Обработка для проверки работоспобности соединения с разыми версиямиСпециальные предложения
(15) Решил проблему, создав компоненты в отдельных приложениях СОМ user841691; AlxPop; Franchiser; SoftIce; SurovcevD; WizaXxX; + 6 – Ответить (15) Методом проб и ошибок- свойствах приложения-> Активация-> Серверное подключение . Так заводится и создается инстанс без ошибок Доброго дня.
Оставлю это здесь.
При последовательном подключении к разным платформам COM соединением, необходимо сделать следующую настройку в свойствах КомКоннектора
размер группы увеличить с 1 до 5
время ожидания уменьшить с 15 до 2
Спасибо за статью. Мне она помогла, но если просто сделать как написано, возникали ошибки. Куча комментариев с разными ошибками не дали быстрого решения как именно сделать настройки. Предлагаю слегка скорректированный алгоритм. (*) - измененные шаги. В нем нет последних шагов по работе с реестром. У меня сработало на двух серверах.
Если автор посчитает возможным - можно было бы перенести в шапку.
Читайте также: