При администрировании серверов 1С:Предприятия часто возникает ситуация, когда на одной физической или виртуальной машине необходимо запустить несколько экземпляров серверов разных релизов (например, 8.3.10 и 8.3.14). Основная проблема, с которой сталкиваются системные администраторы — это ошибка «Различаются версии клиента и сервера» при попытке открыть консоль администрирования (MMC-оснастку). Это происходит потому, что операционная система Windows использует единую зарегистрированную библиотеку radmin.dll для всех версий консолей. В данной статье мы подробно разберем, как обойти это ограничение и настроить стабильную работу нескольких консолей.
Проанализируем механику работы консоли. Оснастка администрирования серверов 1С представляет собой файл с расширением .msc, который запускается через стандартный компонент Windows mmc.exe. Сама по себе оснастка — это лишь оболочка. Всю логику взаимодействия с кластером серверов выполняет динамическая библиотека radmin.dll. При установке новой платформы 1С программа регистрации перезаписывает пути к этой библиотеке в системном реестре. В результате, какую бы версию консоли вы ни пытались запустить, она всегда будет обращаться к той версии radmin.dll, которая была зарегистрирована последней.
Если мы пытаемся подключиться к серверу версии 8.3.10, используя библиотеку от 8.3.14, протоколы обмена данными не совпадают, и мы получаем закономерную ошибку. Рассмотрим пошагово, как решить эту проблему несколькими способами.
Это классический и наиболее распространенный метод. Идея заключается в том, чтобы перед каждым запуском консоли принудительно регистрировать нужную версию radmin.dll в системе. Рассмотрим пример скрипта, который автоматизирует этот процесс для разных разрядностей платформы. Нам понадобится создать текстовый файл с расширением .bat для каждого релиза 1С.
Разберем пример кода для версии 8.3.14 (x64):
@echo off
set version=8.3.14.1779
rem Сначала отменяем регистрацию текущей библиотеки
regsvr32 /s /u "C:\Program Files\1cv8\%version%\bin\radmin.dll"
rem Регистрируем библиотеку нужной нам версии
regsvr32 /s "C:\Program Files\1cv8\%version%\bin\radmin.dll"
rem Запускаем саму консоль MMC
start mmc "C:\Program Files\1cv8\common\1CV8 Servers (x86-64).msc"
Обратите внимание на флаги команды regsvr32: флаг /s (silent) отключает вывод диалоговых окон об успешной регистрации, чтобы скрипт работал быстро и незаметно для пользователя. Выясним важный нюанс: если у вас установлены серверы разной разрядности (например, старая 8.3.10 — 32-битная, а новая 8.3.14 — 64-битная), то для 32-битной версии путь к файлу radmin.dll будет находиться в папке C:\Program Files (x86)\1cv8\....
Если нам необходимо управлять сервером без постоянной перерегистрации библиотек, наиболее современным и правильным способом будет использование службы RAS. Эта служба является посредником между кластером и клиентом администрирования. Прелесть RAS в том, что ей практически безразлична разница в минорных релизах платформы в рамках версии 8.3 при использовании утилиты RAC.
Проанализируем процесс настройки RAS:
bin нужной версии платформы исполняемый файл ras.exe.RAS использует порт 1545. Для второго сервера мы можем назначить, например, 1645.
sc create "1C:Enterprise 8.3 Remote Admin 1645" binPath= "\"C:\Program Files\1cv8\8.3.14.1779\bin\ras.exe\" cluster --port=1645 localhost:1640" start= auto
После этого мы сможем подключаться к серверу через консольную утилиту rac.exe или использовать сторонние графические интерфейсы для администрирования, которые не зависят от radmin.dll.
Даже если мы успешно перерегистрировали библиотеку, мы можем столкнуться с проблемой, когда список серверов в консоли перемешивается или выдает ошибки портов. Это происходит потому, что файл appsrvrs.lst (в котором хранится дерево серверов) общий для всех консолей и находится в профиле пользователя %AppData%\Local\1C\1cv8\.
Рассмотрим, как можно изолировать настройки для каждой версии консоли. Мы можем временно подменить переменную окружения APPDATA внутри нашего bat-файла перед запуском консоли. Посмотрим на пример реализации:
@echo off
set version=8.3.10.2466
set APPDATA=C:\1C_Admin_Profiles\v8310
if not exist "%APPDATA%" mkdir "%APPDATA%"
regsvr32 /s "C:\Program Files (x86)\1cv8\%version%\bin\radmin.dll"
start mmc "C:\Program Files (x86)\1cv8\common\1CV8 Servers.msc"
В этом случае консоль версии 8.3.10 создаст свой собственный файл appsrvrs.lst в указанной папке. Мы можем настроить в этой консоли подключение к серверу на порту 1540. Аналогично создаем скрипт для 8.3.14 с другим путем к APPDATA, где будет настроено подключение к порту 1640. Теперь настройки одной версии никогда не перезапишут настройки другой.
Иногда при попытке запуска 32-битной оснастки на 64-битной операционной системе возникает ошибка инициализации. Выясним причину: по умолчанию команда mmc запускает 64-битную версию консоли. Если вы зарегистрировали 32-битную библиотеку radmin.dll, 64-битная консоль не сможет её загрузить.
Чтобы гарантированно запустить консоль нужной разрядности, следует указывать полный путь к исполняемому файлу mmc.exe с флагом /32. Разберем пример запуска для 32-битной платформы 8.3.10:
%systemroot%\SysWoW64\mmc.exe /32 "C:\Program Files (x86)\1cv8\common\1CV8 Servers.msc"
Использование явного указания пути к SysWoW64 позволяет избежать путаницы и обеспечивает корректную загрузку 32-битных библиотек администрирования.
Мы рассмотрели несколько способов запуска консолей для разных релизов 1С. Подведем итог: наиболее стабильным и «чистым» методом является комбинация перерегистрации библиотеки и подмены пути AppData. Это гарантирует, что каждая консоль будет работать со своей версией radmin.dll и иметь свой собственный список серверов с корректно настроенными портами (1540, 1640 и т.д.).
Не забывайте, что все операции по регистрации библиотек (regsvr32) и созданию служб требуют прав Администратора. При использовании bat-файлов запускайте их правой кнопкой мыши от имени администратора, либо настройте соответствующие права в свойствах ярлыка. Это избавит вас от большинства неявных ошибок доступа при работе с реестром Windows.