The Prodigy

Знаете ли вы, как много софта глючит под Вистой?

Наконец, добрался я до тестирования разного нашего софта под MS Vista. Для нескольких продуктов уже пришлось изменить конфигурацию ExeCrypt-ора. Но это все цветочки. Ягодки были в другом.

Оказывается, даже будучи запущенной под аккаунтом, не имеющим каких-либо ограничений, программа не может записать себя в раздел HKLM-…-Run, то есть в автозапуск. Но в другие разделы HKLM - пишет. По-идее, при попытке записать в защищенный раздел (т.е. при необходимости повышения привелегий) операционка должна была БЫ спросить об этом пользователя. Фиг.

Если запускать приложение через “запустить с правами администратора” - все хорошо. Если сделать .exe.manifest, в котором внутри прописать нижеуказанный код, то тоже все будет работать:

 <trustInfo xmlns=”urn:schemas-microsoft-com:asm.v3″>
   <security>
     <requestedPrivileges>
       <requestedExecutionLevel
         level=”requireAdministrator”
         uiAccess=”false”/>
       </requestedPrivileges>
      </security>
 </trustInfo>
 

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

Как сделать так, чтобы программа запрашивала у системы повышения привелегий только том случае, если человек зашел в настройки программы? Т.е. чтоб окошко “User Account Control” выскакивало при необходимости.



Октябрь 6th 2007 in Обо всем

Комментариев: 14 к записи “Знаете ли вы, как много софта глючит под Вистой?”

  1. сказал 06 Окт 2007 at 01:35 #

    О, это был 100-й пост в блоге. :)

  2. Maniac сказал 06 Окт 2007 at 12:53 #

    И где перечень блогов, которые ты читаешь? :))

  3. cross сказал 06 Окт 2007 at 14:39 #

    Да, ведь нужно же что-то читать! :)

  4. Pavel сказал 06 Окт 2007 at 15:10 #

    Сделай все инсталяторе ;)

  5. сказал 06 Окт 2007 at 16:39 #

    Maniac, да я пока не знаю еще его. У меня в аггрегаторе 61 RSS-каналов. :) Не. ну есть такие, конечно, какие я постоянно читаю но пока не ясно какой по размеру блогролл делать.

    Pavel, да не, мне не так нужно. Необходимо чтою запрос появлялся ТОЛЬКО тогда, когда человек заходит в опции. В остальное время ничего не должно происходить.

  6. Maniac сказал 06 Окт 2007 at 19:25 #

    > Maniac, да я пока не знаю еще его. У меня в аггрегаторе 61 RSS-каналов. Не. ну есть такие, конечно, какие я постоянно читаю но пока не ясно какой по размеру блогролл делать.

    Я не про блогролл, а что в 100-ом посте надо было расписать, как Майнас, какие блоги читаешь :))

  7. сказал 06 Окт 2007 at 20:21 #

    Да как-то пост вообще не об этом был. :) Я за кол-вом постов не следил. Число случайно внизу увидел число круглое - 100. Потому и написал коммент. :)

  8. Mr.KTO сказал 10 Окт 2007 at 23:31 #

    Создавать файл .manifest динамически (т.е. fopen.., потом можно удалять)

  9. сказал 11 Окт 2007 at 00:02 #

    Ух ты. А так можно?

    У меня сейчас “манифест” в ресурсах - там просто стили XP-шные.

  10. Mr.KTO сказал 11 Окт 2007 at 13:11 #

    Ведь вроде *.exe.manifest может находится в директории с *.exe.

    Можно создавать его fwrite(’…

    Не знаю - сработает ли, никогда не сталкивался.

  11. Mike сказал 13 Ноя 2007 at 19:21 #

    “Как сделать так, чтобы программа запрашивала у системы повышения привелегий только том случае, если человек зашел в настройки программы? Т.е. чтоб окошко “User Account Control” выскакивало при необходимости.” - А легко, выносишь нужный код в ActiveX и потом куришь в сторону HRESULT CoCreateInstanceAsAdmin(REFCLSID rclsid, REFIID riid, __out void ** ppv, HWND hWnd). Если будут вопросы попробую вспомнить, просто я с этой хренью воевал год назад, а сейчас оно во всех продуктах работает и надо смотреть уже все ньансы, а они там есть.

  12. Mike сказал 13 Ноя 2007 at 19:25 #

    Кстати, про манифест… Манифест обязательно должен быть в ресурсах, на лежащий рядом Виста не реагирует. По крайней мере в плане UAC.

  13. Инсталятор сказал 17 Авг 2008 at 16:28 #

    В манифесте использовать “asInvoker”, вместо “requireAdministrator”.

  14. сказал 17 Авг 2008 at 17:16 #

    2Инсталлятор: это все равно что вообще ничего не делать.

    “What’s important about this token is the fact, that it is assigned only once, during process start-up, and cannot be changed later in a life of a process. Privilege elevation is therefore only possible by spawning a new process with higher-access token!”.

    Можно как выше Миша сказал, или вот еще тут варианты:

    http://developersoven.blogspot.com/2007/02/leveraging-vistas-uac-with-delphi-part_3659.html

Vista - user account control (Виста - Использование UAC)






   Фото Москвы: ночная москва, красная площадь, вднх - фонтаны.

   Случайные записи: поисковая оптимизация WordPress
Другие посты блога: Новости о Ктулху! Секрет Ктулху и зов Ктулху,     Adsense,     Тяжелые будни ethernet-провайдинга, или Убить за 100 мегабит-секунд,     Жить осталось еще на год меньше,     Фильм Я - легенда -I Am Legend - скачать (рецензия, описание, отзывы),     Фильм Гастролер (Gastroler, 2007) -рецензия, комментарии,     Фото запорожья,