При переходе на современные операционные системы, такие как Windows 10, системные администраторы часто сталкиваются с проблемой поддержки устаревшего, но все еще критически важного для бизнеса программного обеспечения. Классический пример такой ситуации — запуск SQL-версии платформы 1С:Предприятие 7.7. В случаях, когда обслуживание старой системы становится слишком трудозатратным, можно изучить раздел с решениями для перехода с 1С 7.7 на современные конфигурации.
При попытке запустить базу данных на Windows 10 пользователи обычно получают ошибку о том, что версия ODBC-драйвера должна быть 3.5 или выше (хотя в системе установлена более новая версия). Если же попытаться заменить стандартные файлы драйверов на старые версии из Windows XP или Windows Server 2003, система начинает выдавать ошибку "SQL: IM003, Native 160", ругаясь на невозможность инициализации драйвера. В этой статье мы подробно разберем, почему возникает эта проблема, и рассмотрим три практических способа ее решения.
Для того чтобы понять, почему Windows 10 блокирует запуск старой версии 1С, проанализируем механизм взаимодействия платформы с базой данных Microsoft SQL Server. Исторически 1С 7.7 использует для подключения стандартный драйвер SQL Server (из набора MDAC).
Когда мы пытаемся скопировать старые версии файлов драйвера sqlsrv32.dll, sqlsrv32.rll и odbcbcp.dll из Windows XP в каталог C:\Windows\SysWOW64 на Windows 10, мы восстанавливаем совместимость структуры ODBC. Однако эти библиотеки при работе обращаются к системной библиотеке строковых функций SQL Enterprise Components — sqlunirl.dll.
В Windows 10 файл sqlunirl.dll имеет обновленную версию, функции которой не совпадают со старыми вызовами из драйверов эпохи Windows XP. Происходит разрыв цепочки вызовов, и операционная система выдает внутреннюю ошибку 182 (или 126 — "Не найден указанный модуль") при попытке инициализировать драйвер SQL. Именно это и приводит к ошибке IM003 в 1С.
Самый простой и быстрый способ запустить систему — полностью заменить комплект библиотек в системной папке Windows 10 на рабочие версии из предыдущих операционных систем (Windows XP, Windows 7 или папки Windows.old после обновления).
Рассмотрим этот процесс по шагам:
SysWOW64 64-разрядной системы).sqlsrv32.dllsqlsrv32.rllodbcbcp.dllsqlunirl.dllC:\Windows\SysWOW64 (так как 1С 7.7 является 32-битным приложением и в 64-разрядной Windows работает через эмулятор WOW64).sqlsrv32.dll, sqlsrv32.rll, odbcbcp.dll и обязательно sqlunirl.dll скопированными старыми версиями.Важное предупреждение: Прямая замена файлов в системной папке SysWOW64 является грубым вмешательством в работу операционной системы. Это может нарушить работоспособность любого другого программного обеспечения на этом компьютере, которое использует современный ODBC-драйвер для работы со свежими версиями MS SQL Server (например, платформы 1С 8.3, современных BI-систем или веб-серверов).
Если вы не хотите изменять системные файлы операционной системы или у вас на этой же машине работают другие программы, активно использующие MS SQL, лучшим решением станет использование так называемого "секретного релиза платформы" (в сообществе системных администраторов он также известен как патч от Rieba или Solution).
Этот метод абсолютно безопасен для операционной системы, так как не требует изменения файлов в SysWOW64. Принцип его работы заключается в следующем:
C:\Program Files (x86)\1Cv77\BIN) оригинальный файл компоненты работы с базами SQL bkend.dll переименовывается в BkEnd0.dll.BkEnd.dll и вспомогательный файл BkEndUtls.dll.BkEnd.dll, который перехватывает запросы к ODBC, блокирует проверку версии драйвера (обходит ограничение на версию 3.5) и транслирует вызовы напрямую к стандартным системным библиотекам Windows 10.Дополнительным и очень важным плюсом данного метода является то, что этот патч позволяет подключать 1С 7.7 к современным СУБД MS SQL Server (2005, 2008, 2012, 2016) без необходимости искусственно занижать уровень совместимости базы данных (Compatibility Level) до уровня SQL 2000.
Однако помните о технических нюансах: для работы прокси-библиотеки пользователю SQL, под которым 1С подключается к базе данных, необходимо выдать права уровня db_owner и системную роль VIEW SERVER STATE на сервере СУБД.
Существует компромиссный, полностью лицензионно чистый способ, который позволяет изолировать старые версии драйверов индивидуально для процесса 1cv7s.exe с помощью механизма совместимости приложений Microsoft (Application Compatibility Toolkit).
Разберем этот изящный метод по шагам:
C: отдельный каталог, например C:\1Cv7_SQLDriver.odbcbcp.dll, sqlsrv32.dll, sqlsrv32.rll, sqlunirl.dll.HKLM\SOFTWARE\1C_SQL_ODBC) и укажем там пути к файлам из созданной папки C:\1Cv7_SQLDriver.1sfix.sdb. Этот файл будет содержать правило (Shim): при запуске исполняемого файла 1cv7s.exe перенаправлять все его запросы к ветке реестра ODBC на нашу кастомную ветку HKLM\SOFTWARE\1C_SQL_ODBC.
sdbinst.exe -q C:\PathToFix\1sfix.sdb
Таким образом, для операционной системы и всех других программ драйверы останутся нетронутыми, а программа 1С 7.7 будет прозрачно для себя использовать старые версии библиотек из изолированной папки.
Даже решив проблему с ODBC-драйвером, вы гарантированно столкнетесь еще с двумя классическими препятствиями 1С 7.7 на современных ОС.
Оригинальный файл установки платформы setup.exe является 16-разрядным приложением. 64-битные версии Windows 10 физически не могут его запустить. Для решения этой проблемы просто перенесите уже установленную папку 1Cv77 с любого старого компьютера в каталог C:\Program Files (x86)\ на новой машине и зарегистрируйте необходимые библиотеки (например, V7Plus.dll) вручную через утилиту regsvr32. При возникновении сложностей с системными ключами можно изучить руководство по особенностям регистрации 1С 7.7 в реестре Windows.
При первом запуске базы данных система может выдать критическую ошибку: "Порядок сортировки, установленный для базы данных, отличается от системного".
Для обхода этой проверки выполните следующие действия:
BIN).OrdNoChk.prm.Наличие этого файла-заглушки в каталоге исполняемого файла платформы приказывает 1С 7.7 игнорировать проверку системного порядка сортировки таблиц, и база данных успешно запустится.