вторник, 1 апреля 2014 г.

Проблемы, возникающие при подготовке Windows-программ для распространения. Часть 1. Хранение данных лицензии на компьютере пользователя и виртуализация Windows

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

Новая система безопасности Windows, которая была добавлена с систему, начиная Windows Vista, безусловно повысила безопасность работы в системе, но программистам только добавила забот.

Виртуализация реестра и файловой системы

Для того, чтобы старые программы, привыкшие работать под Windows 2000 и Windows XP могли без изменений работать под системами Windows Vista+, приложению даются права на запись в общую ветвь реестра - HKEY_LOCAL_MACHINE\Software, а также на запись в некоторые части файловой системы, но реальная запись происходит в ветку HKEY_LOCAL_MACHINE\_Classes\VirtualStore\Machine\Software. Аналогичная ситуация имеет место быть и для файловой системы.

Статус виртуализации определяется следующими параметрами (тут могут быть неточности):

  1. Виртуализация включена, когда приложение запущено с обычными правами и
    • отсутствует манифест приложения;
    • в манифесте не указано, что следует отключить виртуализацию. Такие манифесты добавляют, как минимум, MSVC2005 и MSVC2008.
  2. Виртуализация выключена
    • в манифесте указано отключение виртуализации;
    • когда приложение запущено с повышенными правами.

Основная проблема с виртуализацией состоит в том, что если вы записали данные лицензии в ветку HKEY_LOCAL_MACHINE\Software, то вы ожидаете, что программа будет работать для всех пользователей, а это не так.

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

Управление вируализацией

Для определения текущего уровня привилегий пользователя, определения и установки статуса виртуализации есть новые функции (вернее, как новые, так и старые с новыми значениями параметров) WinAPI, но их использование не слишком просто. К тому же, если хочется поддерживать совместимость с версиями системы Windows 2000 и Windows XP, некоторые функции придется загружать динамически.

Виртуализация x86/x64

Это еще одна "ось" виртуализации - по умолчанию, данные для x86 приложений в системах x64 хранятся отдельно. Если требуется, чтобы x86 и x64 версии приложения использовали одни и те же данные, эту виртуализацию следует отключить. К счастью, это делается простой установкой одного из новых флагов функции открытия реестра.

Комментариев нет:

Отправить комментарий