14 февраля 1995 г. вышел официальный релиз Delphi 1.
Поздравления всему Delphi сообществу!
14 февраля 1995 г. вышел официальный релиз Delphi 1.
Поздравления всему Delphi сообществу!
Это вторая часть серии статей о UAC и Delphi, состоящей из трех частей.
Перейти к части 1.
Полное описание логики работы UAC выходит за рамки данной статьи. Здесь я собираюсь только обозначить несколько относящихся к делу моментов.
По сути, UAC это все об уровнях привилегий. По умолчанию, обычное Windows приложение не требует администраторских привилегий. Вот почему под Vista, даже административные аккаунты, не используют полный доступ по умолчанию. Цель нормального UAC-приложения – запуск с доступом определяемым текущим аккаунтом, и лишь при реальной необходимости запрашивать повышенные права доступа. Сам процесс запроса повышения прав называется повышение привилегий (privilege elevation), и он требует, что бы пользователь подтвердил действие, перед тем, как это действие будет выполнено. Запрос на повышение может быть представлен либо в форме простого диалога Продолжить/Отменить (режим одобрения Админом), либо полноценного диалога логина (пользователи должны явным образом ввести свои полномочия), в зависимости от типа текущего аккаунта и настроек безопасности. Существует еще пара вариаций запроса в зависимости от того используется ли исполняемым файлом цифровая подпись или нет.
Следует помнить, что Vista поощряет использование цифровых подписей, показывая более дружелюбный запрос на повышение привилегий (далее elevation диалог) для подписанных исполняемых файлов.
Существуют различные способы дать возможность вашему приложению инициировать elevation диалог. Большинство из них, хотя и просты для реализации, однако не дают извлечь максимальную пользу. Я даже не знаю насколько можно их применять, так как они опираются на функции обратной совместимости Vista. В этой части я кратко опишу три из них.
Использование эвристики Vista.
Windows Vista имеет множество встроенных приемов для облегчения возможности поддержки UAC. Один из них фактически основывается на том, что инсталлеры и апдейтеры, как правило, вынуждены писать в защищенную директорию Programm Files и/или ветвь реестра HKLM. Vista распознает такие приложения с помощью эвристического метода определения и автоматически выводит elevation диалог, в тот момент, когда пользователь пытается выполнить их.
Есть целый ряд вещей, которые при этом проверяются, но я хотел бы отметить, единственную вещь, которую довольно легко реализовать и проверить – elevation диалог вызывается, если имя исполняемого файла или информация о его версии содержат такие строки, как, например, “settings”, “install” или “update”.
В результате, такой подход является весьма полезным для автоматического обновления приложений, которые, как правило, самостоятельно скачивают новую версию, а затем запускают внешние утилиты для замены старых файлов приложений. Если эта утилита названа примерно так: 'MyAppUpdater.exe' (и снабжена цифровой подписью), то приложения могут инициировать вызов красивого elevation диалога и запускать ее (утилиту) с полными правами доступа.
Очевидно, что такой подход применяется в отношении любого приложения, независимо от языка, на котором оно было разработано. Вам только нужно выбрать правильное название для исполняемого файла и все! Получите elevation диалог!
Обратная сторона такого подхода заключается в том, что приложение всегда запускается с полными правами доступа, даже если это действительно требуется всего лишь для работы какой-то отдельной его части. Это и тот факт, что такой подход зависит от функциональной совместимости, делают его несколько менее привлекательным для продвинутых пользователей Vista.
Выполнение от имени администратора.
Другим способом достижения того же результата является выбор опции "Выполнять эту программу от имени администратора" (Run this program as an administrator) на вкладке «Совместимость» в свойствах приложения. Обратная сторона медали будет та же, что и предыдущего подхода, приложение всегда будет выполняться с завышенными правами.
Манифест приложения.
Несколько более сложный вариант предыдущего подхода заключается в том, чтобы вставить следующий манифест в исполняемый файл своего приложения:
Ключевой информацией здесь проявляется значение атрибута requestedExecutionLevel. Если атрибут примет значение "requireAdministrator", то это послужит сигналом для Vista отобразить elevation диалог в момент запуска приложения.
Предварительно, манифест может быть связан с исполняемым файлом, вам необходимо скомпилировать его в RES формате, используя следующий RC файл (я предполагаю, что вы достаточно знаете о файлах ресурсов и знаете что такое RC и RES файлы):
1 24 "UAC.manifest"
Где 1 – индекс ресурса, 24 – тип ресурса (RT_MANIFEST), и "UAC.manifest" – актуальное имя файла манифеста, который будет скомпилирован. Замечу, что вы можете использовать другой индекс ресурса, убедившись при этом, что отсутствуют совпадения с индексами других ресурсов, например XP манифестом.
Наконец, вы должны связать полученный RES файл с исполняемым файлом, используя директиву компилятора Delphi $R.
Такой подход имеет точно те же недостатки, сто и предыдущие. Он увеличивает права заранее, а не в случае необходимости.
OK, это был краткий обзор основ UAC совместимости. Теперь мы готовы вигаться в правильном направлении…
Наконец-то произошло то, чего я так боялся. Сейчас мне придется адаптировать приложение для работы в Windows Vista. Первая и главная проблема здесь, это UAC. Поэтому я решил почитать матчасть. Возможно, кому-нибудь пригодится моя попытка перевода.
В настоящее время сотни технических блогов и статей, упоминают о возможностях User Account Control в Vista. К сожалению, многие авторы приуменьшают полезность этой функции.
Я говорю «к сожалению», потому, что мне нравится эта функция. И я считаю, неверным приуменьшать ее значимость. Я также считаю неверным то, что многие технические on-line источники и журналы с раздражением описывают UAC и даже предоставляют своим читателям инструкции по его отключению. Я думаю, что подобное отношение может впоследствии «обернутся боком».
Да, возможно, реализация UAC могла бы быть и лучшей. Но это не повод просто отключать его. При правильной настройке списки контроля доступа на объекты файловой системы UAC могут быть приведены к такому виду, что он уже не просто раздражает, а становится действительно полезным.
Но это не то, о чем я хочу поговорить. В свете моих мнений, я хочу показать вам, как использовать функции UAC в ваших Delphi приложениях. Так сказать, научить вас игратькрасиво, ...
Ввиду объемности статьи, я бы разделил ее на три части. Во второй части, я опишу некоторые наиболее общие UAC концепции, плюс бегло ознакомлю вас с тремя основными простыми методами, которые позволят вашим приложениям соответствовать им. В третьей, заключительной части, я сделаю упор на наиболее продвинутом подходе, включая написание определенного Delphi кода.
Ну что же, приступим…