Ошибка загрузки базы данных в Lyrix.exe (устаревшее приложение Delphi 7) в Windows 10

Существует приложение под названием Lyrix, написанное на Delphi 7 (кажется), для которого у меня есть только исполняемая папка (и установщик, который больше не работает). Я не могу заставить его работать на Windows 10, но, кажется, он работает нормально на Windows XP, 7 и 8.1.

Это говорит, Error connecting to the LyriX database. LyriX will now terminate.

Я пытался связаться с создателем приложения, но, похоже, не повезло, оно не обновлялось годами.

1 ответ

Укороченная версия

Измените локаль, чтобы использовать "." в качестве десятичного разделителя вместо ",". Приложение закодировано для использования локали / культуры машины, на которой оно работает, которая может со временем меняться.

Итак, проверьте Регион панели управления -> Форматы -> Дополнительные настройки -> Значение десятичного знака.

И если ваша база данных хранит значения в одном регионе и пытается загрузить его в другом регионе, произойдет сбой, как указано выше.


Полная версия

За несколько дней мне удалось спуститься по кроличьей норе, чтобы найти проблему.

Сначала я попробовал приложение на виртуальной машине с чистого листа. Я запустил ProcMon из SysInternals, чтобы следить за всем, что делается. Я отслеживал записи в реестре, доступ к диску и т. Д. Поиск чего-то, что давало ошибку Не повезло там.

Я думал, что это будет проблема с драйвером базы данных, или что я пропустил какое-то соединение ODBC или что-то, но нет, я попытался включить трассировку для ODBC, но ничего не было зарегистрировано. Я пытался установить драйвер системы Office 2010, как это предлагалось в других местах, но это ничего не решило. Я попробовал 32-битную и 64-битную версии Windows 10, у обеих была проблема.

Затем я вошел в исполняемый код и попробовал несколько инструментов, таких как IDR (Interactive Delphi Reconstructor), чтобы увидеть, какие строки я мог видеть. Я искал информацию о соединении с базой данных. База данных была жестко закодирована для доступа к .mdb файл с использованием строки подключения Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=xxxxx;Persist Security Info=False;Data Source=

Поэтому я попытался изменить строку для использования Microsoft.Jet.ACE.12.0 вместо этого, и используя такие инструменты, как PE Explorer, Resource Tuner, DeDe, ResEdit, Resource Hacker и т. д. Но все же не повезло в том, чтобы перекомпилировать / сохранить с новой версией строки подключения к базе данных для работы.

Затем я решил, что мне нужно выяснить причину ошибки, поэтому мне нужно было как-то отладить это приложение, чтобы я мог увидеть истинную причину исключения. Я только что получил общее исключение 0x0EEDFADE. Итак, я получил WinDbg чтобы проверить, что происходит. Я баловался с procdump тоже. Но WinDbg достал мне нужные мне стековые трассировки и использовал методы на https://marc.durdin.net/2012/08/locating-delphi-exceptions-in-a-live-session-or-dump-using-windbg/, Мне удалось найти это в одном исключении: "2.2" не является допустимой плавающей точкой "

Это исключение смутило меня, но я понял, что формат чисел в системе, вероятно, был другим, "," против "." вопрос для локали / региона машины. И действительно, Windows 10 решила изменить локаль по умолчанию для десятичного разделителя на запятую вместо полной остановки для Южной Африки. Нет сомнений в том, что многие другие устаревшие или старые приложения, которые не написаны правильно, но работали нормально до того, как Windows 10 перестанет работать из-за этой проблемы.

Другие вопросы по тегам