Как запустить COMОбъект("MSScriptControl.ScriptControl") на 64-битном сервере 1С:Предприятия?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с платформой 1С:Предприятие версии 8.3 на 64-битном сервере, мы часто сталкиваемся с необходимостью использования сторонних COM-объектов. Одним из таких объектов является MSScriptControl.ScriptControl, который предоставляет функциональность для выполнения скриптов на VBScript или JScript прямо из кода 1С. Однако, поскольку MSScriptControl.ScriptControl является 32-разрядным компонентом, его прямое использование в 64-битной среде сервера 1С вызывает ошибку "Класс не зарегистрирован" (0x80040154).

Давайте разберемся, почему возникает эта проблема и как мы можем ее преодолеть. Основная причина заключается в несовместимости разрядности: 64-битное приложение (сервер 1С) не может напрямую загрузить 32-битную библиотеку (msscript.ocx). Для успешного взаимодействия требуются специальные механизмы, которые позволяют 64-битному процессу общаться с 32-битным компонентом.

Мы рассмотрим два основных подхода к решению этой проблемы: использование обертки с помощью Служб компонентов (COM+) и установку 64-битного аналога компонента MSScriptControl.ScriptControl. Каждый из этих подходов имеет свои особенности и преимущества, которые мы подробно проанализируем.

Решение 1: Использование обертки через Службы компонентов (COM+)

Этот метод позволяет нам заставить 32-битный компонент работать в 64-битной среде, создав специальное COM+ приложение. COM+ приложение будет выступать в роли "суррогатного" 32-битного процесса, в котором будет запускаться наш MSScriptControl.ScriptControl. Сервер 1С (64-бит) будет взаимодействовать с этим суррогатным процессом через межпроцессное взаимодействие (IPC), обеспечивая корректную работу.

Перед тем как приступить к настройке COM+, убедимся, что MSScriptControl.ScriptControl корректно зарегистрирован в 32-разрядном системном реестре. Обычно это делается следующей командой:


regsvr32 C:\Windows\SysWOW64\msscript.ocx

Убедившись в регистрации, перейдем к шагам настройки Служб компонентов.

  1. Запускаем консоль «Службы компонентов»: Мы можем сделать это, набрав %windir%\system32\comexp.msc в строке "Выполнить" (Win+R) или найдя ее в "Средствах администрирования".
  2. Создаем новое приложение COM+:
    1. В ветке Приложения COM+ кликаем правой кнопкой мыши и выбираем Создать -> Приложение.
    2. На вопрос «Установка или создание нового приложения» выбираем Создать новое приложение.
    3. Присваиваем приложению понятное имя, например, 1С_ScriptControl. Очень важно выбрать способ активации: Серверное приложение. Это гарантирует, что компонент будет запускаться в отдельном процессе, что критично для 32/64-битного взаимодействия.
  3. Настраиваем учетную запись для запуска приложения:
    1. На следующем шаге мастера выбираем Локальная служба — это встроенная учетная запись службы. Она обычно обладает достаточными правами для работы с системными компонентами.
    2. При запросе членов Роли CreatorOwner, помимо существующих учетных записей, мы обязательно должны добавить System и учетную запись, под которой работает сервер 1С. Это может быть учетная запись пользователя, если сервер запущен под ней, или встроенная учетная запись, если это стандартная установка. Также мы можем добавить группу Пользователи, чтобы любой пользователь мог обращаться к этой компоненте через COM. Это крайне важный шаг для обеспечения доступа сервера 1С к нашему новому COM+ приложению.
  4. Импортируем компонент MSScriptControl:
    1. В ветке только что созданного приложения 1С_ScriptControl переходим на Компоненты.
    2. Кликаем правой кнопкой мыши на Компоненты и выбираем Создать -> Компонент.
    3. В мастере «Установка компонентов COM+» выбираем Импорт уже зарегистрированных компонентов.
    4. На шаге «Выбор компонентов для импорта» ставим флаг 32 разряда. Это позволит мастеру найти и импортировать 32-битный MSScriptControl. Мы увидим в списке MSScriptControl.ScriptControl. Выбираем его и завершаем мастер.

После выполнения этих шагов наше COM+ приложение готово. Сервер 1С теперь сможет успешно создавать COMОбъект("MSScriptControl.ScriptControl"), который будет фактически работать внутри 32-битного процесса, управляемого COM+.

Решение 2: Установка 64-битного аналога (Tablacus Script Control 64)

Если нам не хочется заниматься настройкой COM+ или нужна более простая установка, мы можем воспользоваться 64-битным аналогом MSScriptControl.ScriptControl, который называется Tablacus Script Control 64 (TSC64). Этот компонент разработан сторонними разработчиками и предоставляет ту же функциональность, но скомпилирован как 64-битная библиотека. Это позволяет 64-битному серверу 1С напрямую использовать компонент без необходимости в COM+ обертке.

  1. Загрузка компонента: Нам необходимо найти и загрузить файл tsc64.dll. Рекомендуется искать этот компонент на надежных ресурсах или в репозиториях, предоставляемых разработчиками.
  2. Установка компонента:
    1. Скачанный файл tsc64.dll мы можем поместить в системную папку, например, C:\Windows\System32 (для 64-битных DLL) или в любую другую папку, которая находится в системной переменной PATH.
    2. Затем нам необходимо зарегистрировать DLL-файл с помощью команды regsvr32. Запускаем командную строку (cmd) от имени администратора и выполняем следующую команду:
    3. 
      regsvr32 tsc64.dll
      
    4. Если компонент поставляется с инсталлятором, следуем инструкциям инсталлятора. Инсталлятор обычно сам регистрирует компоненту в системе.

После успешной регистрации tsc64.dll, сервер 1С сможет напрямую создавать COM-объект, используя то же имя класса, что и для оригинального MSScriptControl.ScriptControl, а именно "MSScriptControl.ScriptControl".

Важное замечание о безопасности: При использовании сторонних компонентов, таких как Tablacus Script Control 64, всегда существует риск. Некоторые антивирусные программы могут обнаруживать в нем потенциально нежелательное или вредоносное ПО (например, HEUR:Trojan.Script.SAgent.gen). Это может быть ложным срабатыванием из-за его способности выполнять скрипты, но мы должны быть осторожны. Всегда скачиваем подобные компоненты из надежных источников и проверяем их актуальным антивирусным ПО. Если возникают сомнения, использование COM+ обертки для оригинального MSScriptControl.ScriptControl может быть более безопасным и контролируемым вариантом.

Пример использования MSScriptControl.ScriptControl в 1С

Независимо от выбранного метода решения, код 1С для работы с объектом MSScriptControl.ScriptControl останется прежним. Рассмотрим пример, который демонстрирует получение имени принтера по умолчанию (быстро подготовить каркас подобных функций поможет Консоль кода + ИИ-помощник):


scrptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");
scrptCtrl.language = "vbscript";
scrptCtrl.addcode("
    |Function GetDefaultPrinter
    |    GetDefaultPrinter = vbNullString
    |    Set objWMIService = GetObject(""winmgmts:"" _
    |    & ""{impersonationLevel=impersonate}!\\\\.\\root\\cimv2"")
    |    Set colInstalledPrinters = objWMIService.ExecQuery _
    |    (""Sel ect * fr om Win32_Printer"")
    |    For Each objPrinter In colInstalledPrinters
    |        If objPrinter.Attributes And 4 Then
    |            GetDefaultPrinter = objPrinter.Name
    |            Exit For
    |        End If
    |    Next
    |End Function
");
ПринтерПоУмолч = scrptCtrl.run("GetDefaultPrinter");
Возврат ПринтерПоУмолч;

В этом примере мы:

  1. Создаем новый COM-объект MSScriptControl.ScriptControl.
  2. Устанавливаем язык скрипта на vbscript.
  3. Добавляем VBScript-код, который определяет функцию GetDefaultPrinter. Эта функция использует WMI (Windows Management Instrumentation), подобно тому как процессор схемы запроса работает со структурами данных, для запроса списка установленных принтеров и определения принтера по умолчанию.
  4. Выполняем функцию GetDefaultPrinter с помощью метода run() объекта ScriptControl и получаем результат.

Данный подход позволяет нам выполнять различные скриптовые задачи, используя всю мощь VBScript или JScript (или даже расширяя 1С кодом на C#), прямо из серверного кода 1С.

Дополнительные аспекты и советы по отладке

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

Выбор конкретного решения зависит от требований к производительности, сложности скриптов и уровня безопасности, который мы готовы принять. Использование COM+ обертки обеспечивает высокую стабильность и совместимость с оригинальным компонентом, в то время как Tablacus Script Control 64 предлагает более прямолинейный и простой способ интеграции для 64-битных систем.

Мы успешно рассмотрели и проанализировали основные подходы к решению проблемы запуска 32-битного COM-объекта MSScriptControl.ScriptControl на 64-битном сервере 1С:Предприятия. Надеемся, что эти инструкции помогут вам эффективно интегрировать скриптовую функциональность в ваши серверные решения 1С.

← На главную