Развертывание –> Совместимость приложений

Причины несовместимости приложений в Windows 7

Совместимость существующих приложений является наиболее частой причиной отказа от перехода на новую версию клиентской или серверной операционной системы или существенных задержек с эти процессом. В компаниях могут использоваться сотни и даже тысячи различных приложений, включая приложения, автоматизирующие различые бизнес-процессы, приложения, критичные для повседневной работы и дополнительные приложения, позволяющие выполнять те или иные бизнес-задачи. Наиболее часто возникающие вопросы могут быть сформулирвоаны следующим образом:

  • Как нам спланировать усилия по обеспечению совместимости приложений?
  • Нужно ли вручную тестировать все приложения?
  • Будут ли все приложения работать на Windows 7?
  • Как будут поддерживаться такие новые технологии, как User Account Control и новый браузер Windows Internet Explorer 8?
  • Нужно ли переводить все клиентские компьютеры на Windows Internet Explorer 8?

И так далее… При этом необходимо понимать, что в зависимости от конкретного приложения и его типа проблемы с совместимостью с новой версией операционной системы могут сильно отличаться. Например, приложения, которые используют минимальное число системных функций (например, бизнес-приложения), обычно менее подвержены проблемам совместимости по сравнению с приложениями типа антивирусов, брэндмауеров, расширений для Windows Logon и т.п.

В отличие от предыдущих версий операционной системы, например, Windows XP, в Windows 7 проблемы с совместимостью приложений можно разделить на три основные категории – изменения между версиями операционной системы, изменения, связанные с улучшениями в безопасности системы и новые технологии на уровне ядра операционной системы.

Изменения между версиями операционной системы включают изменения номера версии и, обычно, происходят от релиза к релизу. Приложения часто проверяют номер версии операционной системы для того, чтобы убедиться в том, что они запускаются именно на той версии системы, для которой они разработаны. Такие проверки изменяются наиболее простым способом – либо на уровне изменений в исходном коде приложения, либо с помощью соответствующих системных механизмов.

Изменения, связанные с улучшениями в безопасности системы могут привести к возникновению проблем, связанных с записью в защищенные области файловой системы или реестра или попытками выполнения привилегированных операций. Механизм Windows Resource Protection (WRP) защищает многие системные области реестра и для предотвращения потенциальных конфликтов для приложений используется автоматическое перенаправление записи в файловую систему (т.н. file virtualization) и в отдельные ветви реестра (registry virtualization). Помимо этого, наличие подсистемы User Account Control (UAC) требует, чтобы для выполнения привилегированных операций приложения запускались под учетной записью администратора. Отметим также, что в Windows 7 Internet Explorer работает в защищенном режиме (Protected Mode), что наделяет код, выполняющийся под его управлением, существенно меньшими, по сравнению c Windows XP. Эти ограничения могут повлиять на работу с некоторыми веб-приложениями, которые пытаются выполнять привилегированные операции.

И, наконец, за счет постоянных инноваций на уровне ядра операционной системы приходится отказываться от поддержки ряда устаревших технологий. Так, в 64-битной версии Windows 7 не могут выполняться 16-битные приложения, а также 32-битные приложения, зависящие от 32-битных драйверов. Также следует иметь в виду, что часто используемые недокументированные функции и внутренние структуры данных могут быть несовместимимы с Windows 7.  Наличие новой, более надежной и безопасной подсистемы защиты сетей на уровне брендмауера может быть причиной несовместимости на уровне антивирусов, разработанных для Windows XP.

Перечислим наиболее частые причины несовместимости приложений:

  • Изменение номера версии операционной системы
  • Некорректное использование специальных областей файловой системы
    • Временные папки
    • Пользовательские профили
    • Документы (Documents and Settings, My Documents)
  • Выполнение приложений, требующих повышения привилегий
  • Изменения в реестре
  • Приложения, использующие специфические драйвера
    • Антивирусы, резервное копирование, системные утилиты, драйвера низкого уровня, драйвера для Windows 9x, фильтры для файловой системы и т.п.

Ряд механизмов, встроенных в Windows 7, позволяет адресовать перечисленные выше проблемы и, таким образом, большинство приложений будет продолжать работать на Windows 7 также, как и под  управлением предыдущих версий операционной системы. Рассмотрим наиболее частые причины несовместимости приложений более подробно.

Изменение номера версии операционной системы

Неверная проверка номера версии операционной системы является причиной более 50% всех проблем, связанных с запуском приложений под Windows 7. Чем это вызвано? Многие приложения проверяют только старший номер версии операционной системы или используют старший и младший номер для проверки конкретной версии ОС. Например, следующая проверка

if (majorVersion >= 5 && minorVersion >= 1)

не вызовет проблем в Windows 7 (версия 6.1), но не позволит запустить приложение под Windows Vista (версия 6.0). Как данная проверка работает в ряде версий операционной системы показано в следующей таблице:

Система Версия Старшая > 5 Младшая  > 1 Результат
Windows 2000 5.0 Да Нет Нет
Windows XP 5.1 Да Да Да
Windows Vista 6.0 Да Нет Нет
Windows 7 6.1 Да Да Да


На уровне операционной системы существует ряд механизмов, позволяющих исказить номер версии операционной системы для того, чтобы приложения смогли пройти проверку номера версии. Мы рассмотрим эти механизмы чуть далее.

Выполнение приложений, требующих повышения привилегий

Начиная с операционной системы Windows Vista на уровне ядра появился механизм, благодаря которому все пользователи по умолчанию работают под учетной записью «Standard User». Такое изменение связано с тем, что операционная система подвергается существенным рискам когда пользователь работает под учетной записью Administrator - это и более простая установка вредоносного кода, и возможность повышения привилегий для него и большая вероятность того, что пользователи могут внести повреждения в саму систему.  Данный механизм называется User Account Control (UAC) и он базируется на двух расширениях на уровне ядра операционной системы – т.н. фильтрации маркера доступа (filtered token) и новых интерфейсных элементах для повышения привилегий. Чтобы увидеть эффект фильтрации маркера доступа выполните следующие действия:

  1. Войдете в операционную систему Windows 7 под учетной записью с повышенными привилегиями – например, относящейся к группе Administrator
  2. Запустите два экземпляра командной строки – cmd.exe
    • Первый экземпляр – обычным образом
    • Второй экземпляр – с указанием опции Run as Administrator
  3. В каждом из окон выполните команду whoami с опцией priv
  4. Сравните результаты – отличия в списке привилегий – это как раз то, что отфильтровано (отключено) на уровне UAC – даже при работе под учетной записью с повышенными привилегиями ряд привлегий вам недоступен

Рис. Набор привилегий для стандартного пользователя

Рис. Набор привилегий для администратора

При попытке запуска приложения, выполняющего операции, требующие повышенных привилегии, система, в зависимости от учетной записи, под которой запускается приложение:

  • Либо предлагает подтвердить повышение привилегий для запускаемого процесса в случае, когда он запускается под учетной записью с повышенными привилегиями

    Рис. Интерфейс подтверждения повышения привилегий
  • Либо, в случае, когда процесс запускается под учетной записью без повышенных привилегий, указать параметры (credentials) – имя пользователя и пароль – учетной записи, обладающей достаточными привилегиями для выполнения операции

    Рис. Интерфейс запроса учетной записи с повышенными привилегиями

Реализация механизма UAC влияет не только на запуск ряда приложений – повышение привилегий требуется, например, для установки приложений – операционная система содержит ряд алгоритмов, позволяющих автоматически определить программы установки (инсталляторы) – таковыми, например, считаются приложения с именами Setup, Install, Update, Patch и требует повышенных привилегий для их запуска.

Некорректное использование специальных областей файловой системы и реестра

Упомянутый выше механизм Windows Resource Protection защищает ряд областей файловой системы и реестра от доступа на уровне пользовательского кода. Для того, чтобы приложения, написанные для предыдущих версий операционной системы могли продолжать работать в Windows 7, на уровне ядра реализован механизм перенаправления ряд файловых операций и операций с реестром. Механизм перенаправления работает для файловых операций с каталогами

  • %SYSTEMROOT%,
  • %PROGRAMDATA%,
  • %PROGRAMFILES%\(Subdirectories)

- чтение и запись перенаправляются в каталог %LOCALAPPDATA%\VirtualStore. Чтобы увидеть работу этого механизма на практике, выполните следующие действия:

  1. Войдете в операционную систему Windows 7 под учетной записью с повышенными привилегиями – например, относящейся к группе Administrator
  2. Запустите экземпляра командной строки – cmd.exe
  3. Выполните команду cd \Program Files
  4. Создайте файл, выполнив следующую команду:
    • echo "test" >out.txt
  5. Вы получите сообщение об ошибке «Access denied», т.к. данный каталог защищен на уровне Windows Resource Protection

    Рис. Попытка создания файла в защищенном каталоге
  6. Включим для данного процесса (cmd.exe) поддержку перенаправления операций с файловой системой
  7. Для этого, с помощью комбинации клавиш Crtl+Alt+Esc вызовем Task Manager
  8. Выполним команду View ->Select Columns
  9. Выберем колонку User Account Control Virtualization и нажмем кнопку Ok.
  10. В списке процессов найдем cmd.exe и убедимся в том, что статус User Account Control Virtualization указан как Disabled.

    Рис. Статус перенаправления для cmd.exe
  11. Нажмем правую кнопку «мыши» на процессе cmd.exe и выберем опцию UAC Virtualization
  12. Подтвердим наши действия нажатием кнопки Change virtualization

    Рис. Включение режима перенаправления для cmd.exe
  13. Убедимся в том, что статус User Account Control Virtualization теперь указан как Enabled.
  14. Вернемся в окно командной строки и выполним команду
    • echo "test" >out.txt
  15. Теперь она выполнится без проблем, в чем мы можем убедиться, выполнив команду
    • type out.txt
    • или dir out.txt
  16. На самом деле файл будет физически находиться в другом каталоге, в чем мы убедимся ниже.
  17. Запустим экземпляр cmd.exe  с повышенными привилегиями и выполним команду type out.txt в каталоге \Program Files – файл не будет найдет, т.к. физически он находится в другом, перенаправленном каталоге.
  18. Запустим Windows Explorer. Так как в сессии происходили операции по перенаправлению работы с файловой системой, в панели команд мы увидим команду «Compatibility Files», выбор которой приведет нас к местоположению, где на самом деле находится созданный нами файл.

    Рис. Кнопка Compatibility Files в Windows Explorer

Как перенаправление операций с файловой системой влияет на совместимость приложений?  Так как механизм перенаправления работает прозрачно для «старых» приложений (приложений, у которых нет специального XML-файла, называемого «манифестом» и содержащего опцию необходимых для запуска приложения привилегий), пользователи должны уметь находить создаваемые такими приложениями файлы – для этого в Windows Explorer и реализована команда «Compatibility Files».

Помимо рассмотренных выше причин несовместимости приложений, можно также отметить влияние механизмов Mandatory Integrity Control (MIC) и User Interface Privilege Isolation (UIPI) на выполнение таких операций, как Drag and Drop. Т.к. механизм Drag and Drop основан на обмене сообщениями между приложением-источником и приложением-приемником, они должны выполняться на одном и том же уровне привилегий – в противном случае обмен сообщениями между менее привилегированным и более привилегированным приложением не состоится – никаких сообщений об ошибке показано не будет, но операция Drag and Drop не сможет быть выполнена.

Также отметим такие причины, как изоляция нулевой сессии (влияет на работу интерактивных сервисов и создание глобальных/локальных объектов), работа Internet Explorer в режиме Data Execution Prevention (DEX) – может повлиять на работоспособность ряда расширений, написанных для предыдущих версий браузера и расширенную поддержку High DPI – в последнем случае приложения, написанные для предыдущих версий операционной системы продолжают работать, но возможны искажения на уровне пользовательского интерфейса – в Windows 7 есть средства, позволяющие это исправить – мы рассмотрим их далее.

Оставайтесь с нами

В следующей части мы рассмотрим инструменты и способы разрешения проблем совместимости приложений с операционной системой Windows 7.

Автор: Алексей Федоров

Продолжить обучение

Причины несовместимости приложений в Windows 7 Инструменты и способы разрешения проблем совместимости приложений в Windows 7 Разрешение проблем совместимости приложений в Windows 7 с помощью Program Compatibility Assistant Разрешение проблем совместимости приложений в Windows 7 с помощью Application Compatibility Toolkit Разрешение проблем совместимости приложений в Windows 7 с помощью Windows XP Mode