При запуске 1С:Предприятие 7.7 (SQL-версия) на современных операционных системах Windows (Windows 7, 10, 11 или Windows Server) пользователи часто сталкиваются с ошибкой: «Для доступа к базе данных требуется ODBC-драйвер для MS SQL Server версии 3.50.0303 или старше». Попытка заменить системные библиотеки sqlsrv32.dll, sqlsrv32.rll и odbcbcp.dll в папке System32 на файлы из более старых версий ОС (Windows XP или Server 2003) приводит к ошибке доступа и отказу в копировании, даже если операция выполняется под учетной записью администратора.
В этой статье мы подробно проанализируем причины блокировки системных файлов, разберем порядок действий для смены прав доступа и рассмотрим наиболее безопасные и эффективные способы решения этой проблемы.
Выясним причину, почему возникает проблема и почему операционная система блокирует копирование файлов:
BkEnd.dll платформы 1С 7.7 содержит жесткую проверку номера версии ODBC-драйвера SQL Server. В современных версиях Windows драйверы имеют иную нумерацию, которую устаревший модуль 1С ошибочно воспринимает как непригодную.System32 и SysWOW64 является не группа «Администраторы», а специальная системная служба TrustedInstaller. Даже локальный администратор не имеет прав на запись и удаление этих файлов без предварительной смены владельца.C:\Windows\SysWOW64, а не в C:\Windows\System32 (в System32 находятся 64-битные версии). Попытка копирования 32-битных DLL в папку System32 на 64-разрядной ОС не даст результата из-за механизма перенаправления WOW64.Рассмотрим самый простой и безопасный способ, который не требует изменения прав на системные каталоги Windows и не нарушает целостность операционной системы.
В Windows порядок поиска загружаемых библиотек (DLL Search Order) устроен так, что приложение в первую очередь ищет необходимые DLL-файлы в том каталоге, из которого запущен исполняемый файл 1cv7s.exe. Разберем порядок действий по шагам:
sqlsrv32.dll, sqlsrv32.rll и odbcbcp.dll.C:\Program Files (x86)\1Cv77\BIN\).BIN.При таком подходе 1С подгрузит нужные библиотеки из своей локальной папки BIN, не обращаясь к системным файлам Windows.
Если необходимо заменить файлы непосредственно в системном каталоге Windows, потребуется перехватить владение файлами у TrustedInstaller и выдать полный доступ учетной записи администратора.
На 64-битных системах операцию следует проводить с файлами в каталоге C:\Windows\SysWOW64\, на 32-битных — в C:\Windows\System32\.
Проанализируем выполнение процедуры через командную строку, запущенную от имени Администратора:
takeown /f C:\Windows\SysWOW64\sqlsrv32.dll
icacls C:\Windows\SysWOW64\sqlsrv32.dll /grant Администраторы:F
sqlsrv32.rll и odbcbcp.dll.Если файлы заблокированы запущенными процессами, скопировать их можно, загрузив операционную систему в Безопасном режиме (Safe Mode) или воспользовавшись внешней загрузочной флешкой (LiveCD).
Ещё один вариант решения проблемы без смены системных файлов — отключение проверки версии драйвера ODBC внутри самой платформы 1С 7.7. Для этого редактируется библиотека BkEnd.dll, находящаяся в папке BIN платформы.
В HEX-редакторе в файле BkEnd.dll находится смещение, отвечающее за сравнение версии драйвера, и заменяется байт проверки на безусловный переход. После этого 1С перестает выдавать ошибку версии ODBC и корректно работает со штатным драйвером MS SQL Server современной ОС.
После успешной замены библиотек или их локального размещения при подключении к базе данных могут возникнуть сопутствующие технические сложности. Разберем, как их устранить:
OrdNoChk.prm и поместить его в папку BIN платформы или в каталог информационной базы.odbcad32.exe из каталога C:\Windows\SysWOW64\odbcad32.exe. Стандартный запуск из Панели управления открывает 64-битный администратор ODBC, в котором 32-битные драйверы не отображаются.