При инициализации компонента выполнения сценариев в коде 1С разработчики нередко сталкиваются с аварийным завершением работы следующего вида:
Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
// Ошибка при вызове конструктора (COMОбъект):
// -2147024891(0x80070005): Отказано в доступе.
Проанализируем природу этой неполадки, разберем причины ее внезапного возникновения на рабочих базах и по шагам настроим систему для стабильной работы или полного отказа от устаревшей технологии.
Код 0x80070005 в операционной системе Windows однозначно указывает на ограничение прав доступа (E_ACCESSDENIED). В контексте 1С:Предприятия это чаще всего обусловлено тремя ключевыми факторами:
msscript.ocx исторически разработана исключительно в 32-разрядной версии. Корпорация Microsoft так и не выпустила 64-битный вариант этого модуля. Если клиентское приложение или служба сервера 1С работает под 64-разрядной платформой, прямой вызов 32-битной библиотеки из 64-битного процесса невозможен без суррогатного процесса dllhost.exe.USR1CV8). У этой учетной записи по умолчанию могут отсутствовать разрешения на запуск и локальную активацию компонентов в подсистеме DCOM.msscript.ocx, расположенной в системном каталоге, либо в операционной системе применены политики ограничения запуска скриптовых сред.Если код выполняется в 64-битной среде (сервер 1С x64 или 64-битный толстый/тонкий клиент), классическим решением является размещение 32-битной библиотеки внутри изолированного пула приложений COM+. Разберем по шагам, как настроить такую обертку:
dcomcnfg и нажмем Enter.MSScriptControl_x86) и зададим тип активации Серверное приложение.C:\Windows\SysWOW64\msscript.ocx.После этой процедуры 64-битный процесс 1С сможет прозрачно обращаться к MSScriptControl.ScriptControl через системный межпроцессный мост Windows.
Если приложение уже настроено или код выполняется локально под пользователем с урезанными правами, скорректируем глобальные разрешения DCOM:
dcomcnfg откроем свойства узла Мой компьютер.USR1CV8 (или локальную группу Пользователи DCOM) и предоставим флаги: Локальный доступ, Локальный запуск и Локальная активация.C:\Windows\SysWOW64\, откроем свойства файла msscript.ocx, перейдем на вкладку Безопасность и убедимся, что для группы Пользователи или аккаунта службы 1С установлены флаги Чтение и выполнение.Важно помнить, что технология VBScript признана устаревшей и постепенно выводится компанией Microsoft из состава современных операционных систем. Кроме того, COM-объекты делают код полностью несовместимым с серверами под управлением Linux. Рассмотрим альтернативные способы решения типовых задач без внешних библиотек:
Вычислить() встроенного языка:
// Вместо вызова метода Скрипт.Eval()
Формула = "150 * 1.20 + 45";
Результат = Вычислить(Формула);
MSScriptControl только ради разбора JSON-строк в JavaScript. В современной платформе 1С:Предприятие для этого есть быстрые нативные средства:
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаJSON);
Данные = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
ЗапуститьПриложение() либо задействовать внешние компоненты, разработанные по технологии Native API.Отказ от COM-компонентов в пользу встроенных объектов 1С не только решает проблему с правами доступа 0x80070005, но и гарантирует стабильность вашей информационной базы при последующих обновлениях платформы и серверной ОС.