При регулярном обновлении платформы 1С:Предприятие на серверах и рабочих станциях скапливаются десятки устаревших релизов. Каждая версия занимает от нескольких сотен мегабайт до гигабайта дискового пространства, а со временем суммарный объем неиспользуемых файлов может превышать десятки гигабайт. Однако стандартное удаление предыдущей версии через «Установку и удаление программ» часто приводит к неожиданным сбоям: перестают работать внешние интеграции через COM-соединение, слетают ассоциации файлов конфигураций и обработок, а информационные базы на веб-серверах перестают отвечать.
В этой статье мы подробно разберем, почему деинсталляция старых платформ нарушает работу актуальной версии, как правильно выполнять очистку и как быстро восстановить работоспособность COM-компонентов без полной переустановки 1С.
Проанализируем архитектуру установщика Windows Installer (MSI), который используется платформой 1С. Все релизы ветки 8.3 используют одинаковые системные идентификаторы (GUID) и общие ветки реестра Windows для следующих компонентов:
V83.COMConnector и V83.Application..epf, .erf, .cf, .cfe, .dt.e1c:// и e1cib://.Когда мы запускаем деинсталлятор любой старой версии платформы, он корректно стирает свои файлы, но одновременно с этим подчищает за собой системные записи в реестре. Служба MSI не проверяет, установлены ли в системе более свежие релизы 1С, и просто удаляет зарегистрированные ветки COM-классов. В результате актуальная платформа остается на диске, но внешние приложения (например, веб-сервисы, скрипты интеграции, клиент-банк или другие базы 1С) теряют возможность подключиться к ней через COM.
Если мы уже удалили старые релизы и столкнулись с ошибкой создания COM-объекта, переустанавливать всю платформу заново не требуется. Достаточно зарегистрировать библиотеки нужной актуальной версии вручную через командную строку.
Шаг 1. Регистрация внешнего COM-соединения (comcntr.dll)
Запустим командную строку cmd.exe от имени Администратора. В зависимости от разрядности используемой платформы выполним соответствующую команду:
Для 64-разрядной версии платформы:
C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.XX.YYYY\bin\comcntr.dll"
Для 32-разрядной версии платформы на 64-битной операционной системе:
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.XX.YYYY\bin\comcntr.dll"
Параметр 8.3.XX.YYYY необходимо заменить на точный номер установленного актуального релиза. После выполнения команды появится системное сообщение об успешной регистрации модуля.
Шаг 2. Регистрация OLE/COM-приложения (V83.Application)
Объект V83.Application отвечает за запуск полноценного сеанса 1С в режиме автоматизации. Чтобы перерегистрировать его в системе, перейдем в каталог bin текущей версии и выполним команду с ключом /RegServer:
"C:\Program Files\1cv8\8.3.XX.YYYY\bin\1cv8.exe" /RegServer
Для тонкого клиента используется аналогичная команда с исполняемым файлом 1cv8c.exe:
"C:\Program Files\1cv8\8.3.XX.YYYY\bin\1cv8c.exe" /RegServer
Для восстановления интеграции общего диалога запуска баз зарегистрируем стартер 1С:
"C:\Program Files\1cv8\common\1cestart.exe" /RegServer
Если после массовой очистки старых версий нарушились не только COM-классы, но и ассоциации типов файлов, самым надежным решением будет вызов штатной процедуры восстановления текущей версии через Windows Installer.
Преимущество этого метода в том, что установщик не перезаписывает бинарные файлы, если они не повреждены. Это позволяет избежать конфликтов с блокировкой файлов запущенными сеансами пользователей и не требует немедленной перезагрузки сервера.
Выполним команду восстановления в тихом режиме через утилиту msiexec:
msiexec /fpecms {GUID_Текущей_Версии} /qn
Узнать GUID установленного продукта можно в системном реестре в ветке HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall.
Иногда системные администраторы просто удаляют папки с номерами старых релизов из каталога C:\Program Files\1cv8\. В этом случае файлы исчезают, но в списке «Установка и удаление программ» Windows остаются висеть пустые записи, штатный запуск деинсталлятора для которых выдает ошибку о неназванных файлах.
Чтобы удалить такие записи из реестра вручную, выполним следующие шаги:
regedit от имени Администратора.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\UninstallHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\UninstallCtrl+F найдем подразделы, где значение параметра DisplayName содержит название удаленной версии 1С (например, 1С:Предприятие 8.3 (8.3.22.1709)).Если мы обслуживаем серверную инфраструктуру, перед удалением старых каталогов обязательно проверим две вещи:
ragent: служба жестко привязана к пути конкретного релиза. Если удалить версию, из которой запускается служба, кластер 1С перестанет работать. Изменить путь к новому бинарнику без переустановки службы можно командой:
sc config "1C:Enterprise 8.3 Server Agent" binPath= "\"C:\Program Files\1cv8\8.3.XX.YYYY\bin\ragent.exe\" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d \"C:\Program Files\1cv8\srvinfo\""
wsap24.dll или wsisapi.dll) в каталоге конкретной платформы. После удаления старого релиза необходимо переопубликовать базы через конфигуратор новой платформы либо через утилиту webinst из каталога bin актуальной версии.Чтобы минимизировать риски и простои, рекомендуется придерживаться следующего алгоритма:
regsvr32 для comcntr.dll и 1cv8.exe /RegServer актуального релиза.