Рубрики НовиниСофт

Ентузіаст портував «тисячі програм» у Windows 95 — він переніс туди .NET Framework з Windows 98

Опубликовал
Андрей Русанов

Відеоблогер MattKC, за його власними словами, переніс «тисячі програм» на Windows 95, за допомогою портування у систему важливої функції Windows 98 — .NET Framework. Головне обмеження Windows 95 порівняно з Windows 98 полягає як раз у відсутності .NET Framework — у більшості інших аспектів Windows 98 дуже близька до свого попередника за дизайном і функціями.

У відео тривалістю 51 хвилину MattKC, зокрема, з’ясовує, як змусити .NET Framework працювати правильно у Windows 95. Відсутніх файлів DLL багато, але використання інструменту створення дампу дозволяє ідентифікувати імена відсутніх файлів, щоб їх можна було замінити або проігнорувати. Навіть після перенесення всіх відсутніх файлів .NET все ще не працює. Знадобилося більше ключів реєстру у Windows 95, ніж секунд цьому відео — загальна кількість необхідних ключів становила 5409.

Навіть після перенесення .NET не може належним чином налагодити JIT (Just In Time) у Windows 95. Здається, причиною є ndphlpr, загадковий застарілий драйвер Windows, який не використовується в Windows 98, але потрібний коректної роботи, оскільки .NET аварійно завершує роботу без нього. MattKC визначає, що обман ПК про наявність ndphlpr спрацьовує, але після того, як його дослідження показує, що ніхто не знає, що це за файл.

Онлайн-курс "Лідогенерація у B2B" від Laba.
Де шукати нових клієнтів, щоб збільшити дохід компанії та які інструменти лідогенерації застосовувати? Розбираємо покроково та комплексно.
Дізнатись більше про курс

Це, своєю чергою, викликає помилку винятку машинного коду. Інструмент WinDebug не підтримує .NET нативно (оскільки він ще не існував), тому MattKC все ще має мати справу з деякими проблемами сумісності під час паралельного тестування Windows 95 та 98. Обидві системи кілька днів запускалися на WinDebug, щоб знайти проблему.

Зрештою MattKC знайшов закритий блок коду, який WinDebug не міг прочитати. Після розшифровки код виявився таким:

F2 0F 10 44 24 08 F2 05 2C CO

Цей помилковий код стосувався відсутності API Windows для деяких функцій. Винятком було те, що він не міг знайти «NotifyWinEvent у user32.dll», а SSE2 обфускувала інструкцію в коді. Довелося пропатчити .NET, щоб усунути залежність від SSE2, але це не виправило сумісність, а лише сам дебаггер .NET.

Після значного налагодження Lego Island, MattKC врешті-решт вручну написав код методу для виключення/повідомлення про помилку для друку у вікні, а не там, де він його не бачить. Це працює та дозволяє виправити останню частину сумісності DLL. Після цього Rebuilder для Lego Island і спеціальна, більш модернізована програма для створення скриншотів тепер чудово працювали у Windows 95.

Джерело: Tom`s Hardware

Disqus Comments Loading...