Ошибка V82.COMConnector на сервере 64. Решение проблемы

Если сервер 1С стоит на Windows х64, то рано или поздно Вы столкнетесь с проблемой создания COM-соединения, если соединение инициируется на стороне сервера. На стороне клиента COM-соединение работает нормально, на стороне сервера вываливается с ошибкой.
Данная статья позволяет снять проблему. НО — до переустановки платформы.

В свое время столкнулся с проблемой создания COM-соединения на стороне сервера. Проблема трудно диагностируется, т.к. код, прекрасно работающий под клиентом отказывается работать на сервере, например, если код исполняет регламентное задание.

Предлагаемая ниже методика позволяет избавиться от описываемой проблемы. К сожалению, после переустановки платформы все возвращается на круги своя и процедуру приходится повторять.

Ссылки по теме:

http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=555004

http://www.steeltrace.ru/details/articleid/22/%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F-1%D1%81-com-%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%B0-%D0%B4%D0%BB%D1%8F-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D1%81-64-%D0%B1%D0%B8%D1%82%D0%BD%D1%8B%D0%BC%D0%B8-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F%D0%BC%D0%B8.aspx

UpdДополнение: если на Windows-сервере 64-бит стоит Сервер 1С Предприятие 64-бит (в дистрибутиве windows64.rar), 
то такой проблемы не будет. Уставщик позволяет поставить COM-коннектор без установки самого севера. Это полезно, когда приложение реализовано на платформе 8.3, а COM-соединение нужно к базам на 8.2.

Com64bit

За дополнение спасибо brix8x.

Приведен алгоритм настройки системы, со скрином к каждому действию.

План:

1. Остановка сервера 1С (рекомендуется, но не обязательно)

2. Регистрация компоненты comcntr.dll

3. Создание обертки COM+, позволяющей 64-битному приложению взаимодействовать с 32-битном.

4. Перезагрузка сервера (физического). Не обязательно, но рекомендуется

5. Старт сервера 1С. (обязательно 🙂  

 

Вызываем консоль

CMD

Регистрируем компоненту. Компонента отсутствует, если установлен только сервер 1С. Почему-то 1С публикует ее только в составе клиента.

Регистрация comcntr.dll

Upd. Если компонента не регистрируется, то возможно придется сначала удалить старую компоненту, только затем встанет новая.
Делаем regsvr32 /u "c:Program Files1cv88.2.18.82incomcntr.dll" 
Затем тоже самое, но без "/u" regsvr32 "c:Program Files1cv88.2.18.82incomcntr.dll" 

За дополнение спасибо shur52.

Запускаем службу компонентов. Описывается для Windows Server 2008 R2 Standart.

Старт службы компонентов

 

Регистрация нового приложения

 

 

В ветке Components добавляем новую компоненту comcntr.dll

 

 

ВАЖНО!!! После установки нужно немного изменить свойства. Эта тонкость нигде не описана, без нее у меня не работало!

 

Перезапуск физического сервера

Старт сервера 1С.

50 Comments

  1. Sam13

    Ну есть и есть. Пускай здесь тоже будет.

    В свое время поиском ничего вменяемого найти не мог.

    Reply
  2. no_registration

    Спасибо помогло. Я так понял мы запускаем COM+ приложение которое может работать как с 32 так и с 64. А когда это не используем то наш 64 сервер просто не знает (не может) запустить 32 библиотек.

    Reply
  3. Sam13

    ну вот, кому-то помогло и то хлеб. 🙂 не зря старался значит.

    А вообще эту статью я и сам часто использую. Не забиваю память лишней информацией, смотрю на картинки и делаю. 🙂

    Reply
  4. VDM

    Пользователь локальный или доменный?

    Reply
  5. Sam13

    Доменный

    Reply
  6. zlakizla

    Подскажите, пожалуйста, как быть если нужно зарегистрировать comcntr.dll от 2-х версий платформы? Есть 2 скрипта, которые запускают базы от 8.2.17 и 8.2.14 версий платформы.

    Reply
  7. _qqq

    (8) zlakizla, две компоненты нельзя зарегистрировать.

    Reply
  8. brix8x

    В качестве дополнения: если на Windows-сервере 64-бит стоит Сервер 1С Предприятие 64-бит (в дистрибутиве windows64.rar),

    то такой проблемы не будет. Уставщик позволяет поставить COM-коннектор без установки самого севера. Это полезно, когда приложение реализовано на платформе 8.3, а COM-соединение нужно к базам на 8.2.

    Reply
  9. powerpc

    А что, уже просто поставить клиента 8.2 недостаточно? Ведь установщик сам устанавливает и регистрирует соединение «v82.COMConnector». Обязательно вот так вот всё сложно делать ?

    Reply
  10. Sam13

    Нет, недостаточно. Проблема не в регистрации компоненты, а в конфликте размерности (32 бит и 64 бит)

    Reply
  11. ZloyProger

    Доброго времени суток, коллеги! Внесу свои маленькие пять копеек — чуть подробнее опишите момент про добавление пользователей в роль CreateOwner (на скрине есть этот момент с кнопкой Add User to Role описание только добавьте) без этого у меня долго не взлетало и не мог понять в чем причина..

    Reply
  12. Sam13

    Насколько я помню на этом этапе просто жмем «Next» без всяких выкрутасов.

    Reply
  13. 4iga-buga

    У меня вот такая ошибка стала вываливаться, не могу разобраться в чём дело. помогите

    QVX_UNKNOWN_ERROR: В результате вызова компонента COM возвращена ошибка в формате HRESULT E_FAIL.. Stack trace written to C:Documents and SettingsAll UsersApplication DataQlikTechCustom Dataconnector1cLogStackTrace.txt

    Reply
  14. Sam13

    Стала вываливаться после чего? Обновления платформы?

    Reply
  15. alexkozin

    Вах молодца 😉

    Reply
  16. lemonline

    Здравствуйте, коллеги!

    Другая проблема. Соединение через com устанавливает. Но при попытки создания какого либо объекта — зависает намертво.

    Платформа 8.2.19.130. Клиент-сервер.

    ИмяСервера=»1C.local»;
    ИмяБазы=»db_acc»;
    Логин=»робот»;
    Пароль=»»;
    
    СтрокаПодключенияБух= («Srvr=»»»+СокрЛП(ИмяСервера)+»»»;Ref=»»»+СокрЛП(ИмяБазы)+»»»;Usr=»»»+СокрЛП(Логин)+»»»;Pwd = «»» + СокрЛП(Пароль) + «»»;»);
    V8= Новый COMОбъект(«V82.COMConnector»);
    БД = V8.Connect(СтрокаПодключенияБух); /// ЗДЕСЬ ЗАВИСАЕТ!!!
    
    БД.Обработки.УниверсальныйОбменДаннымиXML.create();
    

    Показать

    Причем если этот код выполнять на физическом сервере 1с, то все выполняется на ура.

    В чем может быть загвоздка?

    Reply
  17. Sam13

    По коду видно, что соединение COM не устанавливает.

    Создает ком-коннектор без привязки к базе — это да. Но видно что зависает именно при подключении к базе.

    Попробуйте подключиться сами к себе, т.е. из базы к самой себе.

    Это позволит понять, проблема в базе-приемнике или где-то еще

    Reply
  18. yudakov

    Спасибо, помогло.

    Перезапускать сервер не пришлось, оказалось достаточно запустить созданное приложение COM+.

    Поставить крыж на «CreatorOwner» не смог (он был disabled). Пользователя USR1CV82 в эту роль добавил руками.

    Reply
  19. kiruha

    Хорошая статья, но есть пояснение. Ключевое слово в статье

    Upd. Дополнение: если на Windows-сервере 64-бит стоит Сервер 1С Предприятие 64-бит (в дистрибутиве windows64.rar),

    то такой проблемы не будет.

    Т.е. основная часть была написана до Upd.

    В настоящее время (2015 год), если вы не подключаетесь со старыми версиями — ничего такого делать не надо, платформа сама все сделает.

    Причина появление ошибки — в падении , затирании, зависании процесса, т.е. типовые ошибки приложения, которые и решаются соответственно

    Решение на сегодняшний момент — убить процесс com(зависло) — и вновь запустить регламент. При этом ничего останавливать не придется.

    Если не помогло(затерли) — перерегистрировать библиотеку, запустить регламент.

    Если не помогло — перезагрузить сервер.

    Если не помогло — переустановить сервер 1С , библиотека станет автоматически.

    Все делать с соответствующими правами конечно

    Т.е. все решения лежат в плоскости администрирования серверов, и не нужно тут же кидаться создавать компоненты и переписывать на него код и т.д..

    Написал пост — так как статьи с появлением ручной регистрации компонент под новым именем все появляются и появляются(и плюсов еще кучу набирают) и в форумах аналогично клонируют

    Reply
  20. Alakbar33

    Никак не могу разобраться почему у меня на предпредпоследнем скриншоте «V82.COMConnector.1 Properties» в закладке «Security» поставить CheckBox на «CreateOwner» не удается. Не активен CheckBox на «CreateOwner» хоть убейся. И администратором заводил COM объект и пользователем которым инсталлировал 1С, и в роль «CreateOwner» добавлял обоих — ничего не помогает. Никто не сталкивался с подобным ?

    Reply
  21. zhmih

    можете помочь,поставил все по пунктам на север если заходить под админом в терминалку то все нормально ком работает,а если заходить под простым пользователем то не работает

    хотел уточнить,смотрите на сервере две вируталки,если заходишь под terminal админом то нормально соеднинияется,если под доменным именем,то нет, пример office/user

    Reply
  22. Sam13

    (22) Alakbar33, ХЗ. Был пару раз такой глюк. Просто удалял все нафиг и начинал по новой.

    Reply
  23. Sam13

    (23) zhmih, Не должно влиять от кого заходишь. Соединение происходит всегда под пользователем, который прописан при установке сервера 1с (он же используется при регистрации обертки)

    Reply
  24. trntv

    Возможность установки CheckBox может зависить от установки флага Enforce access checks for this application

    Reply
  25. just86

    Сделал всё по инструкции. Получил такой результат — 1 сканер ls 2208 пробросился с клиента на x64 сервер, например в спр Номенклатура делает подбор номенклатуры по штрихкоду, а вот подключить второй сканер категорически не получается. 2 сканер так же проброшен, проверку в подключении торгового оборудования проходит, но при сканировании не 1с не реагирует

    Reply
  26. KAPACEB.AA

    Спасибо за статью!

    Решал проблему таким же способом, но не снимал флаг «Enforce access checks…», что привело к проблемам обращения COM-соединения к сетевым ресурсам («обертка» их просто изолировала). После снятия флага все заработало.

    Reply
  27. CaSH_2004

    (2) Да есть, но тут гораздо нагляднее что с картинками и еще есть форум где можно обсудить у кого какие проблемы.

    Так что автор молодец, жалко только что для английской версии.

    Reply
  28. dr2c

    Я вот одного не пойму. Обновили платформу до 8.3.9.2033

    Сервер у нас х64 на Лине.

    При попытке произвести обмены между базами (стандартные или универсальный xml) стали появляться сообщения «При попытке соединения с COM-сервером произошла следующая ошибка:

    {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(13798)}: Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса»

    regsvr32 делал.

    Данный метод для сервера на Win.

    А, что делать с Lin?

    Reply
  29. KAPACEB.AA

    (10)

    К сожалению, в таком решении тоже могут быть свои проблемы.

    У меня при использовании 64-битной версии COM-коннектора на сервере 8.3 (8.3.9.1818) при подключении к базам 8.2, периодически, без видимых на то причин, умирали рабочие процессы. Начал искать по форумам — оказалось, что у некоторых наблюдаются аналогичные проблемы. Пришлось использовать 32-битную версию COM-коннектора, завернув ее в COM+ обертку. В результате все стало ОК.

    Reply
  30. tormozit

    (31) Ключевой момент в решении этой проблемы на 32-битность, а внепроцессность, т.е. использование COM+ приложения во внепроцессном режиме запуска.

    Reply
  31. KAPACEB.AA

    (32)

    Сергей, спасибо за подсказку. Я сначала пробовал «завернуть» в COM+ именно 64-битную библиотеку, но у меня возникли проблемы с подключением. Позже выяснилось, что ошибки были связаны с настройками безопасности, а в голове засело, что 64-битная библиотека — это зло :). Надо еще раз попробовать завернуть в COM+ 64-битную версию компоненты.

    Reply
  32. HAMMER_59

    Установил обновление 8.3.10.2505 ни под Windows 7, ни под Windows 2012 R2 нет объекта V83.COMConnector.

    Проделал все действия, описанные в статье, объект появился и заработал.

    Единственное что смущает, dll-зарегистрирована из конкретной папки программных файлов 8.3.10.2505. Что будет после обновления программных файлов? Снова регистрировать?

    Спасибо автору за статью.

    Reply
  33. Sam13

    Да, все нужно делать снова.

    Reply
  34. valentinanb

    СПАСИБО ОГРОМНОЕ!!!! ЗАРАБОТАЛО!!

    Reply
  35. shur52

    Во-первых, большое спасибо автору. Беда довольно популярная.

    Во-вторых, хотел бы добавить еще одну штуку. Может, я один такой невезучий, но мне приходится делать еще одно в самом начале еще до регистрации новой dll — снимать из командной строки с регистрации старую. Например:

    regsvr32 /u «C:Program Files (x86)1cv88.3.9.2170incomconector.dll»

    Без этого — хоть убейся, не работает у меня новая библиотека.

    Reply
  36. Sam13

    За все время ни разу с таким не сталкивался. Вероятно какой-то глюк в Вашей ОС. По идее команда регистрации просто изменят путь к библиотеке в реестре.

    Reply
  37. stas1kbob

    Спасибо за описание тонкости с безопасностью

    Reply
  38. acsent

    перезапуск сервера на обязателен

    Reply
  39. zels

    У меня выскакивала ошибка «Access denied», пока не задал users как на схеме. Сервер 64 битный, клиент 32 битный.

    Reply
  40. solbol

    А мне помогло переключить тип приложения с серверного на библиотечный

    Reply
  41. Xershi

    Переписал обработку на ОФ и код на клиенте отлично отработал без оберток.

    В теории надо проверить поставить 64-битный клиент, тогда и ком будет 64-битный?

    Reply
  42. nature2002

    и хотя, как тут правильно замечено, что «если на Windows-сервере 64-бит стоит Сервер 1С Предприятие 64-бит (в дистрибутиве windows64.rar),

    то такой проблемы не будет.»,

    дистрибутив COM-соединения находится именно в состве ЭТОГО ДИСТРИБУТИВА!!!!!!!!!!!! 1с не возможно понять……

    Reply
  43. user797159

    А если мне нужно вызвать ADODB.CONNECTION, какую именно dll мне нужно выбрать при создании Com+ компоненты&

    Reply
  44. Terve!R

    (37) Спасибо! Что только не делал, никак компонента не регистрировалась, пока не запустил

    regsvr32 /u «c:Program Files1cv88.3.13.1644incomcntr.dll»

    а потом без «/u» !

    Reply
  45. dabuldakov

    (46) Подскажите пожалуйста что еще делали, таже платформа но никак не могу запустить этот КоммКонектор. Делал все по инструкции, смущает что везде к файлу comconector.dll путь идет в папку Program Files (x86). У меня 64 битный сервер и 1с 64 битная, 1с только по этому пути установлена. «C:Program Files1cv88.3.13.1644incomcntr.dll» Оттуда же и добавляю компоненту в винде. Регистрирую вот так как и вы c:WindowsSysWOW64>regsvr32 «C:Program Files1cv88.3.13.1644incomcntr.dll». Пробовал u.

    Reply
  46. Terve!R

    (47) я регистрировал через просто regsvr32 «C:Program Files1cv88.3.13.1644incomcntr.dll» без всяких SysWOW64

    Обычно этого достаточно, но без /u не прокатило в этот раз.

    Reply
  47. shur52

    (47) Эта статья и все комментарии для нее — для случая 32 битного сервера 1с. Если у вас 1с 64-битный (как вы говорите), то проблемы, ради которой и создавалась статья, — у вас быть не должно. Вероятно, при установке сервера 1с из дистрибутива вы не отметили к установке Com-соединение.

    Reply
  48. dabuldakov

    (49) Все так, при установке не было ком конектора и он не зарегистрировался видимо, спасибо. При 64 битном сервере 1с, надо пользоваться 64 битным регистратором c:WindowsSystem32>regsvr32 «C:Program Files1cv88.3.13.1644incomcntr.dll». А ошибка осталась в модуле при ком соединение но там уже видимо другая история:)

    Reply
  49. taasha25

    Здравствуйте! На терминальном сервере тоже нужно устанавливать компоненту?

    Reply
  50. BigRig

    (46)Спасибо, мне тоже только это помогло

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *