3 октября 2008 г.

Несколько слов о виртуализации в Vista

Это копия моего поста с форума.

Виртуализация позволяет работать в Vista старым кривым программам, которые пытаются писать свои даные в не предназначенные для этого места (Program Files, Windows и т.п.).

Она предназначена только для обеспечения совместимости.

Если такая програма под обычным пользователем пытается писать файл, например, в Program Files, то вместо этого она будет работать с файлом в папке C:\Users\<имя-пользователя>\AppData\Local\VirtualStore\Program Files. Очевидно, что для новой программы такая попытка приведёт к возврату ошибки "в доступе отказано". Кроме того, также очевидно, что такая старая программа будет работать только в Vista, в XP она не работала изначально (имеется ввиду - под обычным пользователем).

Виртуализирован ли процесс можно определить в диспетчере задач (Task Manager) - просто добавьте столбец "Виртуализация". Для программного определения, виртуализирован ли процесс, нужно получить его токен и вызвать GetTokenInformation с TokenVirtualizationEnabled (TOKEN_INFORMATION_CLASS Enumeration).

Как Windows определяет, старая программа или новая?

Виртуализация включается если:
- процесс 32-разрядный.
- процесс запущен интерактивным пользователем.

Виртуализация не включается:
- если процесс 64-разрядный
- для процессов администратора
- для служб
- для вызовов с олицетворением
- для приложений с манифестом, в которых указан requestedExecutionLevel

Как отключить виртуализацию? Во-первых - можно создать стандартный манифест с настройками (см. например). Во-вторых, используя SetTokenInformation с TokenVirtualizationEnabled можно отключить виртуализацию программно. И, наконец, можно щёлкнуть правой кнопкой по процессу в Диспетчере Задач и выключить её из контекстного меню.

2 комментария :

  1. Да, кстати, забыл сказать: поскольку D2007 и выше создают программы, совместимые с Vista, то в них уже включён манифест - т.е. для программ, собранных в D2007 и выше виртуализация уже отключена.
    Правда, манифест включается только, если вы включили галочку "Enable run-time themes", иначе - добавлять его надо ручками. Например, это нужно, если вам нужен другой уровень, отличный от умалчиваемого asInvoker.

    См. также: http://mda-delphi.blogspot.com/2009/02/vista-uac-delphi-2.html

    ОтветитьУдалить

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и (опционально) ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.