NT club. Часть 4. Тотальная совместимость

NT club. Часть 4. Тотальная совместимость

— А этот пацак все время говорит на языках, продолжение которых не знает.
(с) "Кин-Дза-Дза"

Вместо предисловия
В первую очередь, хотелось бы поблагодарить Германа Иванова за его статьи по установке ОС. Жаль, что они вышли уже после того, как я отправил свои статьи в редакцию — мог бы избежать ненужного дублирования материала. В любом случае, надеюсь, что все напечатанное в газете помогло читателям в их общении с компьютером. Во-вторых, хочу сказать спасибо тем, кто задает мне свои вопросы по почте. Поверьте, на хороший вопрос мне интересно ответить — просыпается охотничий азарт. Так что пишите — жду.
Теперь что касается непосредственно темы. Я долго думал, про что писать после установки ОС. Описывать возможности NT? Объяснять архитектуру ОС? Или еще что-нибудь? В конце концов, я решил следующее: если человек перешел на новую систему, то в первую очередь нужно обеспечить работу старых программ. Итак, наша сегодняшняя тема — обеспечение совместимости с устаревшим (Legacy — унаследованным) ПО. Наиболее совместимой среди NT-систем является, безусловно, XP. Кто-то может сказать, что, дескать, некоторые программы, работающие под Windows 2000, отказываются работать в XP. Мой вам ответ: заработают как миленькие. Благо для этого у нас есть все необходимые средства, нужно лишь научиться их использовать. Приложения, потенциально имеющие проблемы в работе под NT-системами, делятся на 3 большие группы (POSIX-программы и приложения для OS/2 не рассматриваются из-за их редкости): 16-разрядные DOS-программы, 16-разрядные Windows-приложения и 32-разрядные Windows-приложения, написанные специально для какой-либо из версий Windows (и, соответственно, использующие нюансы этой версии). Остановимся на каждой из этих групп поподробнее. Да, все рассматривается на примере Windows XP, но большинство моментов справедливо и для более старых версий NT. И еще: перечитайте советы из первой части NT-клуба — на них я останавливаться не буду.

DOS
Для обеспечения совместимости с DOS-программами используется технология виртуальной машины (NTVDM — NT Virtual DOS Machine). Как известно, любая DOS-программа может напрямую работать с оборудованием — например, прочитать или записать байт в какой-нибудь порт (с помощью команд IN и OUT). В NT такое безобразие недопустимо, поэтому любое обращение такой программы к сервисам BIOS или DOS преобразуется виртуальной машиной в обращение к Windows API, а манипуляции с железом в обход ОС жестоко наказываются закрытием программы и выводом сообщения об ошибке. Вот почему многие старые игры не работают под NT. Однако в XP удалось добиться работы DOOM'а со звуком! В общем, если программа написана правильно, т.е. использует сервисы DOS и BIOS и не злоупотребляет прямым обращением к аппаратуре (как это делают драйверы, резидентные программы и утилиты под DOS), то она будет успешно работать под NT. Кстати, файлы Autoexec.bat, Config.sys и прочие лежащие в корне системного диска нужны только для обмана DOS-программ и никакого влияния на них не оказывают. Помните: для того, чтобы настроить программу для DOS, нужно настроить виртуальную машину. Для этой цели существуют 2 файла инициализации в папке %SystemRoot%\system32: AUTOEXEC.NT и CONFIG.NT. Кто работал в DOS, легко с ними разберется. Кроме того, для каждой программы можно указать свои файлы инициализации. Копируем 2 этих файла в папку с программой, модифицируем их и в свойствах exe-файла на закладке Программа жмем кнопку Дополнительно. Далее просто прописываем пути (см. рис.1). Не забывайте, что у каждой программы для DOS может существовать свой PIF-файл с настройками, которые перекрывают файлы инициализации. Множество настроек находится на закладках Программа, Шрифт, Память, Экран, Разное. Их можно редактировать, изменяя свойства либо exe-файла, либо pif-файла, что, в общем-то, одно и то же. Особое внимание следует обратить на закладки Разное и Память — именно здесь могут таиться проблемы в работе программы.



16-bit Windows
Здесь я мало что скажу — такие программы не распространены. Интерфейс прикладного программирования (API) 32-битных систем совместим с 16-битными версиями Windows. Также используется технология Windows in Windows (WOW) для обеспечения большей совместимости (на манер NTVDM).

32-bit Windows
Вот мы и дошли до самого интересного. Windows-программисты знают, что все 32-битные версии Windows имеют общий API, называемый win32. Точнее, имеется определенный минимум процедур и функций (системных сервисов), которые реализуются в каждой версии Windows, и некоторые дополнительные сервисы, различные в разных версиях. В Windows 2000 и XP API представляет собой как бы надмножество всех API предыдущих версий Windows, то есть включает, кроме базового набора сервисов, и многие особенности других версий, но не все. Другими словами, "нормально" написанное приложение будет работать и в NT (возможно, только придется поменять права доступа для папок и ветвей реестра для пользователей — см. "NT club. Часть 1. 9x vs NT"). Если же программа использует особенности архитектуры ОС, недокументированные возможности, неправильно вызывает сервисы или просто проверяет версию Windows, то она либо вообще откажется работать, либо будет работать некорректно (к таким программам относятся многие старые утилиты — их лучше совсем не использовать). В Windows XP появилось мощное средство, решающее такие проблемы — Application Compatibility (совместимость приложений). Механизм его работы чем-то напоминает NTVDM. Система эмулирует для проблемного приложения реестр, системные вызовы, переменные окружения, местоположение временных папок и т.д. Складывается впечатление, что программа работает в той среде, для которой она проектировалась. Теперь она запросто может использовать специфические сервисы Windows, работать со старыми (не существующими в XP) ключами реестра и т.д. Реализовано это следующим образом. В папке %SystemRoot%\AppPatch находится набор библиотек, а также пакеты совместимости с настройками некоторых программ и даже драйверов (файлы .sdb). Когда запускается приложение, в .sdb-файлах ищется его название (содержимое этих файлов можно просмотреть с помощью Application Fix Management Console (файл CompatAdmin.exe) из дистрибутива Application Compatibility Toolkit, но о нем позже) и, если оно там есть, извлекаются параметры совместимости и с помощью соответствующих библиотек эмулируется нужная среда. Можно также вручную указать параметры совместимости, сохраняемые в реестре, воспользовавшись либо Мастером совместимости (Пуск\Программы\Стандартные\Мастер совместимости программ), либо закладкой Совместимость свойств программы (рис.2).



Как видно из рисунка, можно выбрать режим совместимости, параметры экрана и выключить дополнительные текстовые службы (нововведение XP). Но это лишь вершина айсберга. Здесь мы управляем так называемыми слоями, т.е. типичными параметрами для приложений. Для более тонкой настройки нам понадобится пакет Application Compatibility Toolkit. Он находится в папке Support\Tools дистрибутива и называется ACT20.exe. После его установки мы получим ряд полезных приложений и документацию (к сожалению, только на английском). В сопутствующих документах рассматривается технология совместимости и некоторые другие аспекты. Также мы получим ряд программ, полезных для программистов, и 2 приложения, полезных конкретно нам. Это Application Fix Management Console (CompatAdmin.exe) и QFixApp (QFixApp.exe) в каталоге Program Files\Application Compatibility Toolkit\applications. Первая программа предназначена для администраторов и позволяет просматривать и изменять .sdb-файлы, т.е. централизованно управлять совместимостью приложений (см. рис.3).



Вторая программа (QFixApp) позволяет точно настроить параметры совместимости для конкретного приложения. Она имеет 2 закладки: Слои (Layers) и Исправления (Fixes). Как видно из рисунка 4, закладка Слои представляет, в принципе, то же самое, что мы видели на закладке Совместимость свойств программы.



Больший интерес представляет вторая закладка (см. рис.5). Здесь видны все возможные параметры совместимости для приложения. Можно также переключиться в расширенный режим, нажав кнопку Advanced. Порядок работы с программой прост: сначала запускается QFixApp, затем жмем Browse и выбираем нужное нам приложение. Далее выбираем слои совместимости или переходим на вкладку Fix и точно настраиваем параметры. Жмем Run. В расширенном режиме можно нажать кнопку Create fix support, в результате чего в каталоге %SystemRoot%\AppPatch\Custom создастся .sdb-файл, и данное приложение будет всегда запускаться с выбранными параметрами совместимости.



Настройка этих параметров индивидуальна для каждого приложения. Тут придется действовать "методом научного тыка" (конечно, если вы не программист). Еще поэкспериментировать с этим инструментом можно на специальной программе, прилагающейся к пакету совместимости — demoapp.exe в папке Program Files\Application Compatibility Toolkit\demoapp. Вместе с ней идут необходимые пояснения. Так что вперед!

Послесловие
Вот, собственно, и все. Как я уже говорил, я могу ошибаться, поэтому свои исправления и добавления присылайте мне на e-mail. Больше экспериментируйте — я даю вам лишь базис, оставляя углубленное изучение темы на вашей совести.
До следующего!

Creator, creator_vom@tut.by


Компьютерная газета. Статья была опубликована в номере 11 за 2003 год в рубрике soft :: win

©1997-2021 Компьютерная газета