Показаны сообщения с ярлыком Windows Vista. Показать все сообщения
Показаны сообщения с ярлыком Windows Vista. Показать все сообщения

воскресенье, 17 мая 2009 г.

UAC для разработчика 2

Сегодня наконец-то нашел решение проблемы с повышением привилегий для приложения в runtime, которую я озвучивал в одном из своих предыдущих постов. Решение крылось в создании специального COM объекта, который будет содержать весь привилегированный код, требующий повышенных привилегий.
Не буду полностью рассказывать эту возможность, поскольку это все уже описано в блоге Alexander Bozhko Bold&ECO blog
Цикл статей посвященный UAC:
Использование Vista UAC в Delphi: Часть 1
Использование Vista UAC в Delphi: Часть 2
Использование Vista UAC в Delphi: Часть 3

По всей видимости эти же методы будут работать и в Windows 7 - поскольку Microsoft обещает практически полную совместимость с программами, разработанными для Vista.




суббота, 31 января 2009 г.

UAC для разработчика

UAC (User account control) впервые появился в Windows Vista, и сразу же, не заслуженно, получил отрицательную репутацию, а в Интернете появилось полным полно статей как его отключить. Доходит даже до откровенного маразма, что эту функцию ставят как основной недостаток этой операционной системы. Не буду здесь подробно на нем останавливаться, скажу лишь, что у меня он включен по умолчанию, и я нахожу его очень даже полезным для себя, тем более что в Windows 7 он был значительно переработан, хотя на вкус и цвет – все фломастеры разные.

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

Несмотря на то, что UAC обладает некоторой "интеллектуальностью" и при запуске может определить нужно ли приложению увеличение привилегий или нет – возможности его ограничены, и он не всегда корректно работает, что приводит к тихому (или не всегда к тихому) «помиранию» запущенной программы, которой необходимы права администратора, но которые ей никто не дал. Поэтому перед разработчиком стоит задача явно указать необходимый уровень привилегий для своего приложения. Делается это через все тот же файл-манифест приложения, который появился в Windows XP и который используется для отрисовки интерфейса "в стиле XP".

Для явного указания необходимого уровня привилегий используется раздел Security:

<security>
<requestedprivileges>
<requestedexecutionlevel level="requireAdministrator">
</requestedprivileges>
</security>

Полностью файл-манифест приложения может выглядеть, например следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="*"
name="UAC_Elevation_Prompt" type="win32" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" />
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32"
name="Microsoft.Windows.Common-Controls" version="6.0.0.0"
publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*" />
</dependentAssembly>
</dependency>
</assembly>

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

После включения манифеста и сборки проекта при запуске приложения появится окно UAС, запрашивающее необходимые привилегии – теперь приложение уже не помрет молча.

Но не все так просто в Delphi 2009. По каким-то своим, никому не известным причинам, разработчики решили добавлять манифест во все проекты по умолчанию. С одной стороны – довольно удобно, но с другой получается наоборот больше работы. Вот, например, так же по умолчанию в ресурсы добавляется иконка приложения и информация о версии. Это не плохо – потому, что существуют инструменты для их быстрого и безболезненного изменения. А манифест – не очень хорошо, мягко говоря, потому как он жестко задан в файле WindowsXP.res в наиболее общей форме и не учитывает специфики конкретного приложения, и нет инструментов для его изменения.

Так вот, при попытке добавления описанного выше манифеста в проект Delphi 2009 получаем предупреждение компилятора о дублировании ресурсов и наш манифест не включается в приложение. Можно перейти в исходный код проекта и убрать директиву компилятора {$R *.res}, но в этом случае мы лишимся иконки приложения и информации о версии. Можно убрать файл WindowsXP.res куда подальше, чтобы Delphi его не нашла – но это тоже неудачный способ выхода из положения – поскольку нарушается работа VCL.

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

Оригинальный способ для решения проблем использован в файловом менеджере Total Commander – для выполнения операций требующих повышения привилегий используется отдельное приложение TCADMIN.EXE, которому передается команда в случае невозможности выполнения операции с правами текущего пользователя.

Интересно, а как еще можно организовать повышение привилегий в Runtime и решить проблемы с манифестом в Delphi 2009?

пятница, 18 июля 2008 г.

Extended FAT

Сегодня речь пойдет о новой файловой системе появившейся в Windows Vista Service Pack 1. Также в конце статьи будет немного интересной (на мой взгляд) информации, о том, как подружить Windows XP SP2 с новой файловой системой.

Итак, вчера совершенно случайно, как это обычно бывает, обнаружил у себя возможность форматирования в новую файловую систему – exFAT.

Стало жутко интересно – что же это за зверь такой – полез в Википедию:

Материал из Википедии — свободной энциклопедии

exFAT (от англ. Extended FAT — «расширенная FAT») — файловая система для флеш-дисков впервые представленная в Windows Embedded CE 6.0. Используется в качестве замены FAT в тех случаях, когда использование файловой системы NTFS нецелесообразно.

Основными преимуществами перед всеми текущими версиями FAT является:

  • Убран лимит на размер файла в 232 байт (4 Гигабайта), теоретический лимит на размер файла 264 байт (16 Эксабайт).
  • Максимальный размер кластера увеличен до 225 байт (32 Мегабайта).
  • Улучшено распределение свободного места за счёт введения битовой карты свободного места, что уменьшает фрагментацию диска.
  • Убран лимит на количество файлов в одной директории.
  • Введена поддержка списка прав доступа.
  • Введена поддержка транзакций (опциональная возможность, должна поддерживаться устройством).

Windows Vista Service Pack 1 имеет поддержку exFAT.

Интересно, наконец-то появилась более-менее нормальная файловая система для сменных носителей, а то как-то несолидно смотрелись ограничения на файлы в 2 ГБ на «флешках» размером 16 ГБ или внешних жестких в 320 ГБ. Попробовал отформатировать – как ни странно, работает :)

Ну а теперь переходим к самому интересному. Затем я попробовал перенести «флешку» на второй компьютер с Windows XP и естественно получил сообщение, что диск не отформатирован. Обидно. Стал экспериментировать. В итоге ночных экспериментов выяснилось, что драйверы от висты отлично работают и под ХР!

Чтобы заставить ХР понимать новую файловую систему необходимо:

  1. найти два файла из дистрибутива Windows Vista SP 1 - uexfat.dll и exfat.sys;
  2. скопировать файл exfat.sys в папку windows\system32\drivers и uexfat.dll в windows\system32 на машине с Windows XP;
  3. В блокноте создать файл (например install.reg) и наисать в нем следующее:

--------------Начало файла instal.reg ---------------------

Windows Registry Editor Version 5.00


[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\exfat]

"Description"="exFAT File System Driver"

"DisplayName"="exFAT File System Driver"

"ErrorControl"=dword:00000001

"Group"="Boot File System"

"Start"=dword:00000002

"Type"=dword:00000002


[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\System\exfat]

"EventMessageFile"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,\

00,6f,00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,\

5c,00,49,00,6f,00,4c,00,6f,00,67,00,4d,00,73,00,67,00,2e,00,64,00,6c,00,6c,\

00,00,00

"TypesSupported"=dword:00000007

--------------конец файла instal.reg ---------------------

  1. Естественно создать точку восстановления системы
  2. Теперь запустить созданный файл install.reg и перезагрузиться

Теперь компьютер с XP не отказывался прочитать «флешку» :) Однако форматировать в эту файловую систему под ХР не получится.

P.S. Ну и т.к. Windows XP официально не поддерживает эту файловую систему, если вы решите повторять то что написано выше, то вы все делаете на свой страх и риск, я не виноват если после указанных действий ваш компьютер вылетит в форточку.

четверг, 29 мая 2008 г.

Windows Vista теперь совместима с Delphi 7

Довольно часто Microsoft публикует обновления для Windows Vista со следующим описанием:

установите это обновление, чтобы устранить ряд известных проблем совместимости приложений в Windows Vista.

Однако я бы назвал не так - а так как в заголовке - "... ряд проблем совместимости Windows Vista с приложениями". Потому как приложения уже есть, а Vista еще дорабатывается.

Так например в майском обновлении на ряду с другими, были установлены проблемы совместимости с Delphi 7. Если раньше при попытке установки Delphi 7 выдавалось сообщение, что данный продукт имеет известные проблемы с Windows Vista и установка была невозможна, то теперь все должно пройти гладко.

Сам я не проверял, так как не пользуюсь Delphi 7 уже несколько лет (с момента появления BDS 2005). Хотя на одном из сайтов (сейчас не вспомню где) я видел голосование с вопросом - "какой версией Delphi вы пользуетесь?". Большинство ответило что Delphi 7 (не смотря на существование Turbo).

В центре справки и поддержки Microsoft можно посмотреть полный список приложений, для которых устранены проблемы совместимости.