При переносе рабочих мест и обработок обмена данными с операционной системы Windows XP на Windows 7 разработчики часто сталкиваются с ситуацией, когда код подключения из 1С:Предприятия 7.7 к базе 1С:Предприятия 8.3 перестает работать у непривилегированных пользователей. При этом запуск программы 1С 7.7 от имени администратора проходит успешно и соединение устанавливается без ошибок.
Посмотрим на типовой фрагмент встроенного языка 1С 7.7, на котором происходит сбой:
в8 = СоздатьОбъект("V83.ComConnector");
Соединение = в8.Connect(СтрокаПодключения);
При выполнении этого кода под учетной записью с ограниченными правами объект либо не инициализируется вовсе, возвращая пустое значение или системную ошибку, либо функция Сообщить(ТипЗначенияСтр(в8)) выдает неопределенный COM-объект вместо валидного интерфейса. Разберем детально, почему это происходит и как правильно настроить операционную систему для стабильной работы обмена.
Проанализируем ключевые различия в подсистемах безопасности Windows XP и Windows 7, влияющие на работу COM-объектов:
HKEY_CLASSES_ROOT или ветку HKEY_LOCAL_MACHINE\Software\Classes), операционная система перенаправляет запросы или блокирует доступ.regsvr32 по умолчанию регистрирует 64-разрядные библиотеки. Внутрипроцессный COM-сервер (In-Process DLL) разрядности x64 не может быть загружен в 32-битное адресное пространство процесса 1cv77.exe.Connect() библиотека comcntr.dll обращается к общему каталогу программных лицензий (C:\ProgramData\1C\licenses), временным папкам пользователя (%TEMP%, %LOCALAPPDATA%\1C) и файлам самой информационной базы 1С 8 (в случае файлового режима). Отсутствие прав на чтение или запись в этих каталогах приводит к блокировке соединения.Если на рабочем месте используется 64-разрядная операционная система Windows 7, регистрацию необходимо производить строго через 32-разрядный системный регистратор. Выполним следующие шаги:
cmd, нажмем правой кнопкой мыши на найденный пункт и выберем «Запуск от имени администратора».
C:\Windows\SysWOW64\regsvr32.exe /u "C:\Program Files (x86)\1cv8\8.3.XX.XXXX\bin\comcntr.dll"
8.3.XX.XXXX — точный номер установленного релиза платформы 1С 8.3.
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.XX.XXXX\bin\comcntr.dll"
DllRegisterServer.Если компонента успешно зарегистрирована, но вызов СоздатьОбъект("V83.ComConnector") по-прежнему блокируется, необходимо открыть права на запуск и активацию DCOM для локальных пользователей системы. Разберем по шагам настройку через системную оснастку:
dcomcnfg и нажмем клавишу Enter.Наиболее надежным решением в корпоративной среде является регистрация comcntr.dll в качестве отдельного серверного приложения COM+. Это позволяет запускать коннектор от имени системной службы или специального служебного пользователя, полностью изолируя права вызывающего процесса 1С 7.7 от привилегий операционной системы.
dcomcnfg от имени администратора.V83_COMConnector) и выберем тип «Серверное приложение».C:\Program Files (x86)\1cv8\8.3.XX.XXXX\bin\comcntr.dll.Проанализируем доступность каталогов, необходимых для работы платформы 1С 8.3:
C:\Program Files (x86)\1cv8.*.lic) находится в общедоступном каталоге C:\ProgramData\1C\licenses, а не в закрытом профиле администратора (C:\Users\Administrator\AppData\...).1Cv8.1CD.Если системные политики безопасности не позволяют гибко настраивать права COM/DCOM, рассмотрим альтернативные варианты интеграции:
V83.ComConnector используем инициализацию через СоздатьОбъект("V83.Application"). Данный режим запускает отдельный процесс 1cv8.exe со своим окружением, что снижает чувствительность к правам in-process библиотек (однако требует больше оперативной памяти и отдельную пользовательскую лицензию).MSXML2.DOMDocument, а регламентное задание или обработка в 1С 8.3 загружает данные по расписанию.MSXML2.ServerXMLHTTP или WinHttp.WinHttpRequest.5.1. Это полностью исключает зависимость от платформенных библиотек 1С 8 на рабочей станции с 1С 7.7.