Знаете ли вы, как много софта глючит под Вистой?
Наконец, добрался я до тестирования разного нашего софта под 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 Обо всем
О, это был 100-й пост в блоге.
И где перечень блогов, которые ты читаешь? :))
Да, ведь нужно же что-то читать!
Сделай все инсталяторе
Maniac, да я пока не знаю еще его. У меня в аггрегаторе 61 RSS-каналов.
Не. ну есть такие, конечно, какие я постоянно читаю но пока не ясно какой по размеру блогролл делать.
Pavel, да не, мне не так нужно. Необходимо чтою запрос появлялся ТОЛЬКО тогда, когда человек заходит в опции. В остальное время ничего не должно происходить.
> Maniac, да я пока не знаю еще его. У меня в аггрегаторе 61 RSS-каналов. Не. ну есть такие, конечно, какие я постоянно читаю но пока не ясно какой по размеру блогролл делать.
Я не про блогролл, а что в 100-ом посте надо было расписать, как Майнас, какие блоги читаешь :))
Да как-то пост вообще не об этом был.
Я за кол-вом постов не следил. Число случайно внизу увидел число круглое - 100. Потому и написал коммент. 
Создавать файл .manifest динамически (т.е. fopen.., потом можно удалять)
Ух ты. А так можно?
У меня сейчас “манифест” в ресурсах - там просто стили XP-шные.
Ведь вроде *.exe.manifest может находится в директории с *.exe.
Можно создавать его fwrite(’…
Не знаю - сработает ли, никогда не сталкивался.
“Как сделать так, чтобы программа запрашивала у системы повышения привелегий только том случае, если человек зашел в настройки программы? Т.е. чтоб окошко “User Account Control” выскакивало при необходимости.” - А легко, выносишь нужный код в ActiveX и потом куришь в сторону HRESULT CoCreateInstanceAsAdmin(REFCLSID rclsid, REFIID riid, __out void ** ppv, HWND hWnd). Если будут вопросы попробую вспомнить, просто я с этой хренью воевал год назад, а сейчас оно во всех продуктах работает и надо смотреть уже все ньансы, а они там есть.
Кстати, про манифест… Манифест обязательно должен быть в ресурсах, на лежащий рядом Виста не реагирует. По крайней мере в плане UAC.