Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Для новичков > Запуск программы в Windows 7 |
Автор: apostolnikolai 3.2.2011, 21:26 |
Как прогу заставить запустится из под администратора в Windows 7 |
Автор: CodeMonkey 3.2.2011, 22:42 |
Есть несколько способов, а ответ зависит от вашего сценария ("зачем это надо"). |
Автор: apostolnikolai 3.2.2011, 22:51 |
мне нада чтоб при запуске моего exe в Windows 7 сразу производился запуск от админа |
Автор: Poseidon 4.2.2011, 00:09 |
В свойствах файла галочку поставь. ![]() |
Автор: apostolnikolai 4.2.2011, 00:14 |
а по подробней если можно |
Автор: Poseidon 4.2.2011, 00:26 |
![]() |
Автор: apostolnikolai 4.2.2011, 08:32 |
а из кода можно как нить при запуске запросить права ? |
Автор: SPrograMMer 4.2.2011, 11:28 | ||||
во, расскажите про это
и про это ![]() |
Автор: apostolnikolai 4.2.2011, 15:33 |
у меня прорга для настройки VPN и TCP/IP и для этого ей нада чтод она была запущена от админа |
Автор: apostolnikolai 4.2.2011, 19:08 |
и хотелось бы чтоб при запуске ехе винда сразу предлагала запустить прогу от админа |
Автор: CodeMonkey 4.2.2011, 20:48 | ||||||
Эти примеры относятся к классу программ, которые вообще не могут работать без администраторских прав. В этом случае применяется манифест с requestedExecutionLevel равным requireAdministrator.
Этот пример относится к программе, которая должна работать для всех пользователей. Здесь используется три модели: - Ничего не делать. Это самый типичный случай, подходящий для большинства программ. Кто программу запустил - под теми правами она и выполняется. К примеру, файловый менеджер позволит просмотреть Program Files и My documents, но отредактировать - только My documents. Если пользователю нужно отредактировать Program Files, он может запустить файловый менеджер под учётной записью, имеющей на это права. Понятно, что в программе нужно предусматривать ситуацию с нехваткой прав (вообще, это нужно делать всегда, но тут - особенно). - Элевация по запросу. Это модель Проводника Windows и Total Commander - когда программа запускает саму себя под администратором только для выполнения одной или пачки связанных операций и выхода. Модель применяется, когда операции над защищёнными объектами могут являться частью обычной работы, но относительно редки. Реализуется командой 'runas' или любым другим подходящим способом. - Приложение смешанного режима. Это модель RegEdit. Применяется только системными утилитами, когда программе нужно работать с защищёнными объектами в больших количествах. Заключается в том, что приложение запускается с максимальными правами, доступными пользователю. К примеру, запущенная под обычным пользователем программа под ним и будет работать. Но запущенная администратором - попросит элевацию до максимального уровня (ибо он доступен администратору). Реализуется манифестом с requestedExecutionLevel равным highestAvailable.
Если это действительно её основная функциональность - то действовать так же, как и для установщика программ. Но если там есть просмотр и отдельно - изменение настроек, то лучше бы сделать элевацию по запросу. На манер того, как это делает стандартный диалог настроек. Ты открываешь свойства и можешь их просматривать. Но если ты хочешь их изменить - для этого есть кнопочка со щитом. |
Автор: apostolnikolai 5.2.2011, 00:11 |
нет она не установщик но ей для работы нужны права админи инане не чего не робит права ей нужны сразу при pапуске ! для правки TCP |
Автор: northener 5.2.2011, 03:16 | ||
Ты ответы читаешь? CodeMonkey в ответах просто "раздухарился". (Тот его ответ можно включить в "Избранное" для цитирования). |
Автор: apostolnikolai 5.2.2011, 11:36 | ||
Все спасибо !!!! За помощь !!! ВОТ НАШЕЛ ЕСЛИ КОМУ ЕЩЕ НА ДА БУДЕТ ПРОВЕРИЛ ВСЕ РАБОТАЕТ ! Многие начинающие программисты сталкиваются с проблемой поднятия привилегий в Vista. Существует 3 способа это сделать: Включить специальный манифест в исполняемый файл Поднять привилегии во время выполнения программы путем запроса их у системы соответствующими API функциями Запустить отдельный процесс с привилегиями (в том числе и самого себя) Рассмотрим первый и третий способ как самые простые. Чтобы создать манифест, необходимо сделать текстовый файл манифеста в кодировке UTF-8 со следующим содержимым:
Для того чтобы включить в Delphi приложение этот манифест для Vista, нужно проделать следующие шаги: Сохранить указанное выше содержимое в xml файле с кодировкой UTF-8, например manifest.xml Создать тестовый файл задания для компилятора ресурсов brcc32.exe. Пусть например manifest.rc, со следующим содержимым: 1 24 manifest.xml Скомпилировать ресурсный файл. Положить manifest.xml, manifest.rc в папку с компилятором ресурсов brcc32.exe (находится в директории Bin с установленной Delphi) Скомпилировать ресурсный файл. Перетаскиваем manifest.rc в пиктограмму brcc32.exe. Получившийся файл manifest.res, кладем в директорию с вашим проектом Delphi. В свойствах проекта пишем подключение ресурса {$R manifest.res} Вот и все. Теперь при запуске приложения с таким манифестом будет выводится административный запрос, и программа в Vista будет запущена под администратором. ВЗЯТО ЗДЕСЬ : http://www.procoding.ru/dinamicheskoe-podnyatie-privelegij-v-vista/ |
Автор: CodeMonkey 5.2.2011, 13:53 | ||||
Как ты вообще читаешь? Я не говорил, что она установщик. Я сказал, что действовать надо так же, как и в случае с установщиком - внедрением манифеста с requestedExecutionLevel равным requireAdministrator.
Просто где-то в трети случаев оказывается, что решение, взятое по принципу "бери этот код, он у меня работает, я гарантирую это", оказывается неверным. Где-то в половине случаев из этой трети правильное решение заключается в выборе другого метода, но самое главное, что в оставшейся половине случаев администраторские полномочия оказываются просто не нужны. Всё решается либо принципом минимальных привилегий, либо без них удаётся обойтись изменив логику/порядок действий/etc. Поэтому я предпочитаю утюгом вытащить реальный сценарий и уже по нему дать ответ, чем дать ответ вслепую и способствовать рождению очередного монстра. |
Автор: apostolnikolai 9.2.2011, 20:38 |
Вопрос как можно из проги в момент запуска установить вот этот параметр ![]() |
Автор: CodeMonkey 9.2.2011, 22:02 | ||
А вот это ты тогда нафига в манифест вставлял?
|
Автор: apostolnikolai 9.2.2011, 22:12 |
ты можешь конкретно написать как |
Автор: apostolnikolai 9.2.2011, 22:53 |
сори туплю |
Автор: CodeMonkey 18.2.2011, 19:02 |
http://www.gunsmoker.ru/2011/02/dll-dll-hell-dll-side-by-side.html#styles. |