Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
В свойствах файла галочку поставь.  smile 

Автор: apostolnikolai 4.2.2011, 00:14
а по подробней если можно

Автор: Poseidon 4.2.2011, 00:26
user posted image

Автор: apostolnikolai 4.2.2011, 08:32
а из кода можно как нить при запуске запросить права ?

Автор: CodeMonkey 4.2.2011, 11:07
Цитата(apostolnikolai @  4.2.2011,  09:32 Найти цитируемый пост)
а из кода можно как нить при запуске запросить права ? 


Ещё раз: есть МНОГО способов это сделать. А правильный ответ зависит от того, зачем тебе это надо.

Цитата(apostolnikolai @  3.2.2011,  23:51 Найти цитируемый пост)
мне нада чтоб при запуске моего exe в Windows 7 сразу производился запуск от админа  


Так тебя и спрашивают: ЗАЧЕМ тебе это надо.

Например, твоя программа - установщик. И ей нужны права, чтобы установить программу в Program Files.
Ещё вариант - твоя программа вроде оснастки MMC. И ей требуются права, потому что их требуют некоторые загружаемые в неё оснастки.
Ещё пример - редактор реестра. Ему нужны права, чтобы править HKLM.
Ещё пример - служебная программа управления службой. Ей нужны права, чтобы запускать и останавливать службу.

Во всех случаях правильное решение будет разным.

Что у тебя?

Автор: SPrograMMer 4.2.2011, 11:28
Цитата(CodeMonkey @  4.2.2011,  11:07 Найти цитируемый пост)
Ещё пример - редактор реестра. Ему нужны права, чтобы править HKLM.

во, расскажите про это

Цитата(CodeMonkey @  4.2.2011,  11:07 Найти цитируемый пост)
твоя программа - установщик. И ей нужны права, чтобы установить программу в Program Files.

и про это 


 smile 

Автор: apostolnikolai 4.2.2011, 15:33
у меня прорга для настройки VPN и TCP/IP и для этого ей нада чтод она была запущена от админа

Автор: apostolnikolai 4.2.2011, 19:08
и хотелось бы чтоб при запуске ехе винда сразу предлагала запустить прогу от админа 

Автор: CodeMonkey 4.2.2011, 20:48
Цитата(SPrograMMer @  4.2.2011,  12:28 Найти цитируемый пост)
твоя программа - установщик. И ей нужны права, чтобы установить программу в Program Files.


Эти примеры относятся к классу программ, которые вообще не могут работать без администраторских прав. В этом случае применяется манифест с requestedExecutionLevel равным requireAdministrator.

Цитата(SPrograMMer @  4.2.2011,  12:28 Найти цитируемый пост)
Ещё пример - редактор реестра. Ему нужны права, чтобы править HKLM


Этот пример относится к программе, которая должна работать для всех пользователей. Здесь используется три модели:

- Ничего не делать. Это самый типичный случай, подходящий для большинства программ. Кто программу запустил - под теми правами она и выполняется. К примеру, файловый менеджер позволит просмотреть Program Files и My documents, но отредактировать - только My documents. Если пользователю нужно отредактировать Program Files, он может запустить файловый менеджер под учётной записью, имеющей на это права. Понятно, что в программе нужно предусматривать ситуацию с нехваткой прав (вообще, это нужно делать всегда, но тут - особенно).

- Элевация по запросу. Это модель Проводника Windows и Total Commander - когда программа запускает саму себя под администратором только для выполнения одной или пачки связанных операций и выхода. Модель применяется, когда операции над защищёнными объектами могут являться частью обычной работы, но относительно редки. Реализуется командой 'runas' или любым другим подходящим способом.

- Приложение смешанного режима. Это модель RegEdit. Применяется только системными утилитами, когда программе нужно работать с защищёнными объектами в больших количествах. Заключается в том, что приложение запускается с максимальными правами, доступными пользователю. К примеру, запущенная под обычным пользователем программа под ним и будет работать. Но запущенная администратором - попросит элевацию до максимального уровня (ибо он доступен администратору). Реализуется манифестом с requestedExecutionLevel равным highestAvailable.

Цитата(apostolnikolai @  4.2.2011,  16:33 Найти цитируемый пост)
у меня прорга для настройки VPN и TCP/IP и для этого ей нада чтод она была запущена от админа 


Если это действительно её основная функциональность - то действовать так же, как и для установщика программ.

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

Автор: apostolnikolai 5.2.2011, 00:11
нет она не установщик но ей для работы нужны права админи инане не чего не робит права ей нужны сразу при pапуске ! для правки TCP

Автор: northener 5.2.2011, 03:16
Цитата(apostolnikolai @  5.2.2011,  00:11 Найти цитируемый пост)
нет она не установщик но ей для работы нужны права админи инане не чего не робит права ей нужны сразу при pапуске ! для правки TCP 


Ты ответы читаешь?
CodeMonkey в ответах просто "раздухарился". (Тот его ответ можно включить в "Избранное" для цитирования).

Автор: apostolnikolai 5.2.2011, 11:36
Все спасибо !!!! За помощь !!! 
ВОТ НАШЕЛ ЕСЛИ КОМУ ЕЩЕ НА ДА БУДЕТ ПРОВЕРИЛ ВСЕ РАБОТАЕТ !

Многие начинающие программисты сталкиваются с проблемой поднятия привилегий в Vista. Существует 3 способа это сделать:
Включить специальный манифест в исполняемый файл
Поднять привилегии во время выполнения программы путем запроса их у системы соответствующими API функциями
Запустить отдельный процесс с привилегиями (в том числе и самого себя)


Рассмотрим первый и третий способ как самые простые. Чтобы создать манифест, необходимо сделать текстовый файл манифеста в кодировке UTF-8 со следующим содержимым:

Код

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly
xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
processorArchitecture="x86"
version="1.0.0.0"
type="win32"
name="ЛинкМастер 2.0"/>
<description>ЛинкМастер 2.0 - новый стандарт в SEO аналитике</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="x86"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>



Для того чтобы включить в 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
Цитата(apostolnikolai @  5.2.2011,  01:11 Найти цитируемый пост)
нет она не установщик но ей для работы нужны права админи инане не чего не робит права ей нужны сразу при pапуске !


Как ты вообще читаешь? Я не говорил, что она установщик. Я сказал, что действовать надо так же, как и в случае с установщиком - внедрением манифеста с requestedExecutionLevel равным requireAdministrator.

Цитата(northener @  5.2.2011,  04:16 Найти цитируемый пост)
CodeMonkey в ответах просто "раздухарился". (Тот его ответ можно включить в "Избранное" для цитирования).


Просто где-то в трети случаев оказывается, что решение, взятое по принципу "бери этот код, он у меня работает, я гарантирую это", оказывается неверным. Где-то в половине случаев из этой трети правильное решение заключается в выборе другого метода, но самое главное, что в оставшейся половине случаев администраторские полномочия оказываются просто не нужны. Всё решается либо принципом минимальных привилегий, либо без них удаётся обойтись изменив логику/порядок действий/etc.

Поэтому я предпочитаю утюгом вытащить реальный сценарий и уже по нему дать ответ, чем дать ответ вслепую и способствовать рождению очередного монстра.

Автор: apostolnikolai 9.2.2011, 20:38
Вопрос как можно из проги в момент запуска установить вот этот параметр 
user posted image

Автор: CodeMonkey 9.2.2011, 22:02
А вот это ты тогда нафига в манифест вставлял?

Код
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="x86"/>
</dependentAssembly>
</dependency>

Автор: 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.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)