Знаете ли вы, как много софта глючит под Вистой?
Наконец, добрался я до тестирования разного нашего софта под 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 к записи “Знаете ли вы, как много софта глючит под Вистой?”
Vista - user account control (Виста - Использование UAC)
Фото Москвы: ночная москва, красная площадь, вднх - фонтаны.
Случайные записи: поисковая оптимизация WordPress
сказал 06 Окт 2007 at 01:35 #
О, это был 100-й пост в блоге.
Maniac сказал 06 Окт 2007 at 12:53 #
И где перечень блогов, которые ты читаешь? :))
cross сказал 06 Окт 2007 at 14:39 #
Да, ведь нужно же что-то читать!
Pavel сказал 06 Окт 2007 at 15:10 #
Сделай все инсталяторе
сказал 06 Окт 2007 at 16:39 #
Maniac, да я пока не знаю еще его. У меня в аггрегаторе 61 RSS-каналов. Не. ну есть такие, конечно, какие я постоянно читаю но пока не ясно какой по размеру блогролл делать.
Pavel, да не, мне не так нужно. Необходимо чтою запрос появлялся ТОЛЬКО тогда, когда человек заходит в опции. В остальное время ничего не должно происходить.
Maniac сказал 06 Окт 2007 at 19:25 #
> Maniac, да я пока не знаю еще его. У меня в аггрегаторе 61 RSS-каналов. Не. ну есть такие, конечно, какие я постоянно читаю но пока не ясно какой по размеру блогролл делать.
Я не про блогролл, а что в 100-ом посте надо было расписать, как Майнас, какие блоги читаешь :))
сказал 06 Окт 2007 at 20:21 #
Да как-то пост вообще не об этом был. Я за кол-вом постов не следил. Число случайно внизу увидел число круглое - 100. Потому и написал коммент.
Mr.KTO сказал 10 Окт 2007 at 23:31 #
Создавать файл .manifest динамически (т.е. fopen.., потом можно удалять)
сказал 11 Окт 2007 at 00:02 #
Ух ты. А так можно?
У меня сейчас “манифест” в ресурсах - там просто стили XP-шные.
Mr.KTO сказал 11 Окт 2007 at 13:11 #
Ведь вроде *.exe.manifest может находится в директории с *.exe.
Можно создавать его fwrite(’…
Не знаю - сработает ли, никогда не сталкивался.
Mike сказал 13 Ноя 2007 at 19:21 #
“Как сделать так, чтобы программа запрашивала у системы повышения привелегий только том случае, если человек зашел в настройки программы? Т.е. чтоб окошко “User Account Control” выскакивало при необходимости.” - А легко, выносишь нужный код в ActiveX и потом куришь в сторону HRESULT CoCreateInstanceAsAdmin(REFCLSID rclsid, REFIID riid, __out void ** ppv, HWND hWnd). Если будут вопросы попробую вспомнить, просто я с этой хренью воевал год назад, а сейчас оно во всех продуктах работает и надо смотреть уже все ньансы, а они там есть.
Mike сказал 13 Ноя 2007 at 19:25 #
Кстати, про манифест… Манифест обязательно должен быть в ресурсах, на лежащий рядом Виста не реагирует. По крайней мере в плане UAC.
Инсталятор сказал 17 Авг 2008 at 16:28 #
В манифесте использовать “asInvoker”, вместо “requireAdministrator”.
сказал 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