Ситуация, когда на одном сервере требуется одновременная работа нескольких версий платформы 1С:Предприятие 8.3, является стандартной для крупных компаний или системных администраторов, сопровождающих специфические отраслевые решения. Одним из таких решений является Альфа-Авто, которая часто жестко завязана на конкретную версию платформы (например, 8.3.10.2466) из-за использования внешних компонент защиты, таких как V8AutoSalon.dll. Ошибка при установке новой платформы, когда по неосторожности затирается существующая служба Windows, может привести к полной остановке работы программы.
Разберем подробно, как восстановить работоспособность системы, правильно настроить параллельную работу разных версий платформы и решить проблемы с регистрацией библиотек защиты.
При установке новой версии платформы 1С (например, 8.3.24.1548) по умолчанию включена опция "Установить сервер 1С:Предприятия как сервис Windows". Если на сервере уже работает другая версия платформы в качестве службы, установщик 1С перенастраивает существующую службу 1C:Enterprise 8.3 Server Agent на новый исполняемый файл. В результате старые базы, требующие специфических настроек или 32-битных компонент, начинают запускаться на новой платформе, что вызывает критические ошибки, такие как невозможность загрузки V8AutoSalon.dll.
Проанализируем ситуацию: Альфа-Авто (особенно старых редакций) активно использует COM-объекты и внешние компоненты, которые могут быть чувствительны к разрядности процесса. Если новая платформа установлена как 64-битная, а библиотека защиты 32-битная, прямая загрузка станет невозможной. Также важным фактором является то, что параметры регистрации COM-соединителя comcntr.dll в реестре Windows перезаписываются последней установленной версией.
Самым надежным решением является запуск каждой версии платформы как отдельной службы Windows с уникальными портами. Рассмотрим, как это сделать по шагам. Допустим, основная платформа 8.3.24 работает на стандартных портах (1540, 1541, 1560-1591), а для Альфа-Авто нам нужно вернуть 8.3.10.
Воспользуемся утилитой командной строки sc для создания новой службы. Важно запускать командную строку от имени администратора. Проанализируем пример команды:
sc create "1C:Enterprise 8.3.10 Server Agent" binPath= "\"C:\Program Files (x86)\1cv8\8.3.10.2466\bin\ragent.exe\" -srvc -agent -regport 2541 -port 2540 -range 2560:2591 -d \"C:\1C_Data\srvinfo_8_3_10\"" start= auto
Разберем параметры этой команды подробнее:
binPath — указывает путь к исполняемому файлу конкретной версии платформы. Обратите внимание на использование кавычек и экранирование.-regport 2541 — порт главного менеджера кластера. Мы изменили стандартный 1541 на 2541.-port 2540 — порт агента сервера. Мы изменили стандартный 1540 на 2540.-range 2560:2591 — диапазон портов для рабочих процессов. Это критически важно, чтобы рабочие процессы разных платформ не конфликтовали между собой.-d — путь к каталогу данных кластера. Никогда не используйте один и тот же каталог srvinfo для разных версий платформы, это приведет к порче файлов конфигурации кластера.После создания службы необходимо зайти в консоль "Службы", найти созданную запись и убедиться, что она запускается под корректной учетной записью (обычно .\USR1CV8) и имеет доступ к папке данных -d.
Если после настройки сервера Альфа-Авто все еще выдает ошибку при обращении к V8AutoSalon.dll, проблема может заключаться в несоответствии разрядности сервера 1С и библиотеки. Рассмотрим решение через создание приложения в "Службах компонентов" (COM+).
Выясним причину: 64-битный процесс сервера 1С не может напрямую загрузить 32-битную DLL. Решение заключается в использовании dllhost.exe в качестве суррогата. Выполним следующие действия:
1C_AlphaAuto_Protection.V8AutoSalon.dll.Этот метод позволяет 64-битной платформе 1С обращаться к 32-битной компоненте через межпроцессное взаимодействие, что снимает ограничения разрядности.
Часто Альфа-Авто использует COM-соединение для связи с другими базами. При установке версии 8.3.24 системная библиотека comcntr.dll была перерегистрирована на новую версию. Если нам нужно, чтобы внешние вызовы использовали именно версию 8.3.10, выполним ручную перерегистрацию.
Рассмотрим порядок действий в командной строке:
regsvr32 /u "C:\Program Files\1cv8\8.3.24.1548\bin\comcntr.dll"
regsvr32 "C:\Program Files (x86)\1cv8\8.3.10.2466\bin\comcntr.dll"
Помните, что регистрация comcntr.dll в системе может быть только одна. Если другие ваши базы (например, Бухгалтерия 3.0) требуют новую платформу для COM-соединений, вам придется искать компромисс или использовать запуск через V83.COMConnector.1 с явным указанием версии в коде (хотя 1С это поддерживает ограниченно).
Чтобы избежать подобных проблем в будущем, проанализируем лучшие практики администрирования серверов 1С:
Использование виртуализации: Как было предложено в обсуждении на форуме, самым "чистым" решением является разнос разных версий платформ по разным виртуальным машинам. Это полностью исключает конфликты в реестре и портах.
Контроль обновлений: При установке обновлений платформы всегда выбирайте "Выборочную установку" и внимательно проверяйте список устанавливаемых компонентов. Если сервер 1С уже настроен и работает, галку "Установить сервер как службу" лучше снимать, обновляя бинарные файлы вручную или настраивая новые службы через sc create.
Диагностика через технологический журнал: Если компонента не загружается, создайте файл logcfg.xml в папке conf нужной платформы. Настройте сбор события EXCP. Это поможет точно выяснить, по какому пути сервер ищет библиотеку и какой код ошибки возвращает операционная система (например, "отказано в доступе" или "не найден указанный модуль").
Таким образом, совместная работа Альфа-Авто на старой платформе и других баз на свежих релизах вполне возможна. Главное — четко разделять ресурсы сервера (порты и папки данных) и корректно управлять регистрацией внешних библиотек в операционной системе.