При разработке и администрировании информационных баз 1С:Предприятия нередко возникает необходимость программно узнать, в каком окружении выполняется код. Это требуется при подключении внешних компонент (библиотек), интеграции с внешними COM-объектами или оптимизации ресурсоемких операций. Давайте подробно разберем, как определить разрядность сервера 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. Для получения разрядности самой операционной системы требуются дополнительные подходы.
PROCESSOR_ARCHITECTURE содержит значение x86, но операционная система автоматически создает переменную PROCESSOR_ARCHITEW6432 со значением AMD64 или ARM64. Наличие этой переменной однозначно указывает на 64-битную ОС.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С:
COMОбъект и запуск системных процессов будут заблокированы платформой. В таких условиях единственным надежным источником информации остается штатный объект СистемнаяИнформация.WScript.Shell поддерживаются только на серверах под управлением Windows. Если сервер 1С работает под управлением Linux, использование COM вызовет исключение, поэтому перед обращением к COM-объектам следует всегда проверять операционную систему через СистемнаяИнформация.ТипПлатформы.Таким образом, для определения разрядности самого сервера 1С достаточно использовать СистемнаяИнформация.ТипПлатформы в серверном модуле, а для определения разрядности операционной системы — обращаться к системным переменным окружения или утилитам ОС с обязательной обработкой исключений.