Как программно определить разрядность сервера 1С и операционной системы?

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

При разработке и администрировании информационных баз 1С:Предприятия нередко возникает необходимость программно узнать, в каком окружении выполняется код. Это требуется при подключении внешних компонент (библиотек), интеграции с внешними COM-объектами или оптимизации ресурсоемких операций. Давайте подробно разберем, как определить разрядность сервера 1С и чем этот процесс отличается от получения разрядности самой операционной системы.

Определение разрядности процесса сервера 1С

Проанализируем базовый инструмент платформы 1С для получения сведений об исполняемой среде — объект СистемнаяИнформация. Свойство ТипПлатформы возвращает системное перечисление, которое указывает разрядность и тип операционной системы именно того процесса, в контексте которого выполняется код.

Важный нюанс: если вызывать СистемнаяИнформация.ТипПлатформы на стороне клиента, вы получите разрядность клиентского приложения (например, тонкого клиента). Чтобы получить разрядность самого сервера 1С (процесса rphost), вызов обязательно должен происходить на сервере.

Посмотрим на пример функции, выполняемой в серверном контексте:


&НаСервере
Функция ПолучитьРазрядностьСервера1С() Экспорт

    Информация = Новый СистемнаяИнформация;
    ТипПлатф = Информация.ТипПлатформы;
    
    Если ТипПлатф = ТипПлатформы.Windows_x86_64 
        Или ТипПлатф = ТипПлатформы.Linux_x86_64 
        Или ТипПлатф = ТипПлатформы.Linux_aarch64 Тогда
        Возврат "64-бит";
    ИначеЕсли ТипПлатф = ТипПлатформы.Windows_x86 
        Или ТипПлатф = ТипПлатформы.Linux_x86 
        Или ТипПлатф = ТипПлатформы.Linux_ARM Тогда
        Возврат "32-бит";
    КонецЕсли;
    
    Возврат "Неопределено";

КонецФункции

Разберем, как работает этот код. Объект СистемнаяИнформация возвращает одно из значений системного перечисления ТипПлатформы (например, ТипПлатформы.Windows_x86_64 для 64-битного сервера Windows или ТипПлатформы.Windows_x86 для 32-битного сервера). Это дает точный ответ о разрядности кластера серверов 1С.

Определение разрядности операционной системы

Рассмотрим распространенную ситуацию: на 64-разрядной операционной системе Windows установлен и запущен 32-разрядный сервер 1С (через подсистему WOW64). В этом случае метод СистемнаяИнформация.ТипПлатформы вернет Windows_x86, отражая разрядность процесса 1С, но не самой Windows. Для получения разрядности самой операционной системы требуются дополнительные подходы.

  1. Чтение системных переменных окружения Windows: При работе 32-битного процесса в 64-битной Windows переменная PROCESSOR_ARCHITECTURE содержит значение x86, но операционная система автоматически создает переменную PROCESSOR_ARCHITEW6432 со значением AMD64 или ARM64. Наличие этой переменной однозначно указывает на 64-битную ОС.
  2. Обращение через WMI (Windows Management Instrumentation): Позволяет запросить точные данные об архитектуре процессора и версии ОС через системные классы Windows.
  3. Чтение системных файлов под Linux: В среде Linux разрядность ядра и системы определяется анализом системных файлов или выполнением команды uname -m.

Посмотрим на пример получения разрядности ОС Windows через переменные среды на сервере:


&НаСервере
Функция ПолучитьРазрядностьОСWindows() Экспорт

    Попытка
        WshShell = Новый COMОбъект("WScript.Shell");
        АрхитектураWOW = WshShell.Environment("SYSTEM").Item("PROCESSOR_ARCHITEW6432");
        АрхитектураОсн = WshShell.Environment("SYSTEM").Item("PROCESSOR_ARCHITECTURE");
        
        Если ЗначениеЗаполнено(АрхитектураWOW) Тогда
            Возврат "64-бит (процесс запущен через WOW64)";
        ИначеЕсли СтрНайти(АрхитектураОсн, "64") > 0 Тогда
            Возврат "64-бит";
        Иначе
            Возврат "32-бит";
        КонецЕсли;
    Исключение
        Возврат "Не удалось определить (ошибка COM или ограничения прав)";
    КонецПопытки;

КонецФункции

Ограничения безопасности и кроссплатформенность

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

  1. Профили безопасности: Если в кластере 1С или в конкретной базе включены профили безопасности (или код исполняется в безопасном режиме), создание внешних объектов COMОбъект и запуск системных процессов будут заблокированы платформой. В таких условиях единственным надежным источником информации остается штатный объект СистемнаяИнформация.
  2. Кроссплатформенная совместимость: Вызовы COM-объектов через WScript.Shell поддерживаются только на серверах под управлением Windows. Если сервер 1С работает под управлением Linux, использование COM вызовет исключение, поэтому перед обращением к COM-объектам следует всегда проверять операционную систему через СистемнаяИнформация.ТипПлатформы.

Таким образом, для определения разрядности самого сервера 1С достаточно использовать СистемнаяИнформация.ТипПлатформы в серверном модуле, а для определения разрядности операционной системы — обращаться к системным переменным окружения или утилитам ОС с обязательной обработкой исключений.

← На главную