Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 469

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Моей программе нужно зарегистрировать расширения файлов, но Windows Vista / 7 с включенной UAC (User Account Control) не пускает меня в реестр.
Использую манифест (в приложении). Пробывал требовать права администратора через level, но тогда винда каждый раз перед запуском требует подтверждение, а это неудобно.

Как быть?

Приложение:
  1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  2. <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  3. <assemblyIdentity
  4. version="1.0.0.0"
  5. processorArchitecture="X86"
  6. name="Player"
  7. type="win32"
  8. />
  9. <description>Player</description>
  10. <dependency>
  11. <dependentAssembly>
  12. <assemblyIdentity
  13. type="win32"
  14. name="Microsoft.Windows.Common-Controls"
  15. version="6.0.0.0"
  16. processorArchitecture="X86"
  17. publicKeyToken="6595b64144ccf1df"
  18. language="*"
  19. />
  20. </dependentAssembly>
  21. </dependency>
  22. <!-- Identify the application security requirements. -->
  23. <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
  24. <security>
  25. <requestedPrivileges>
  26. <requestedExecutionLevel
  27. level="asInvoker"/>
  28. </requestedPrivileges>
  29. </security>
  30. </trustInfo>
  31.  
  32. </assembly>


Виталий Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Виталий (статус: 2-ой класс)
Вопрос отправлен: 28 февраля 2009, 12:07
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 9; последнее сообщение — 1 марта 2009, 12:59; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 28 февраля 2009, 18:57 [#1]:

А зачем каждый раз при запуске регистрировать расширение? Правильный вариант такой (могучая мс шла к нему много много лет:) )
При инсталляции регистрируем расширение. И всё.
Но если Ваша программа помешана на своей важности и считает, что только она должна быть связана с этим расширением (да, бывает такое), то она должна только проверять. И если уже не соответсвует - повышать превилегии и менять привязку расширения.
Ну и есть более кардинальные методы - отключить UAC, так как это средство, которым МС хочет перевести на другие ОС:)
Галочка "подтверждения прочтения" - вселенское зло.
Виталий

Виталий (статус: 2-ой класс), 28 февраля 2009, 19:27 [#2]:

Дело в том, что если в манифесте указано, что программа доступна только для админов (а только тогда открывается доступ к реестру), то UAC требует подтверждение запуска программы, а когда прога в реестр лезет, она (UAC) вообще не реагирует, а просто пропускает. Расширения я при каждом запуске делать конечно не буду, но если надо будет, то как быть?
В Windows 7, которой я пользуюсь, UAC настраиваемая и не такая надоедливая функция, и даже я сам её использую.
Вадим К

Вадим К (статус: Академик), 28 февраля 2009, 19:31 [#3]:

Не использовать бэта версии ос.
Галочка "подтверждения прочтения" - вселенское зло.
Виталий

Виталий (статус: 2-ой класс), 28 февраля 2009, 19:55 [#4]:

Дак разницы нет, в Висте тоже эта система есть, и у многих пользователей она включена.
Вадим К

Вадим К (статус: Академик), 28 февраля 2009, 20:25 [#5]:

Считаю висту тоже бета версией оси - на ней работать нельзя.
Галочка "подтверждения прочтения" - вселенское зло.
Виталий

Виталий (статус: 2-ой класс), 1 марта 2009, 08:20 [#6]:

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

Задам вопрос по другому. Как получить доступ на изменение реестра (запись), если изначально программа не запущена под администратором (но юзер имеет права на изменение рееста)?

Кстати сам пользовался и вистой долгое время, а сейчас Windows 7, так что скажу, что в любой системе можно удобно и хорошо работать, если её правильно настроить.
Виталий

Виталий (статус: 2-ой класс), 1 марта 2009, 09:25 [#7]:

С механизмом действия разобрался, но щяс другой вопрос :
Как запустить программу с привилегиями админа программно? Причём имя пользователя неизвестно.
Вадим К

Вадим К (статус: Академик), 1 марта 2009, 10:26 [#8]:

Если пароль администратора неизвестен - то никак не запустите (ну разве что через дыры, но это другая история).
Обычна программа НЕ ДОЛЖНА писать в такие ветви реестра. Это должен делать инсталлятор. И точка.

Нормальная настройка висты/севена - это как минимум отключение UAC...

Итого, почитайте это http://msdn.microsoft.com/ru-ru/library/bb384691.aspx и обратите внимание на asInvoker и чем можно заменить.

Также почитайте это http://msdn.microsoft.com/ru-ru/library/aa905330.aspx, подумайте, может ещё не позно.

В целом, что бы UAC не ругался на ваше приложение, оно должно либо вести себя ниже воды, тише травы, либо быть подписанным МС.
Мне особо понравился абзац о "Проектирование приложений для Windows Vista" - там ни одного полезного совета. Ну разве кроме подписать.
Галочка "подтверждения прочтения" - вселенское зло.
Виталий

Виталий (статус: 2-ой класс), 1 марта 2009, 12:59 [#9]:

Я хочу сделать как делает WinRar. Он при сохранении ассоциаций в реестр запускает копию программы с параметрами и от имени админа. Он же мой пароль не знает, но как-то запускает.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 24 февраля 2020, 12:44
Выполнено за 0.02 сек.
Рейтинг@Mail.ru