SyDr
Сидра
- Сообщения
- 651
- Репутация
- 158
Зачем это может понадобиться? В качестве примера могу привести Process Explorer от Марка Руссиновича: он может работать как с правами администратора, так и с правами обычного пользователя (вполне возможно, что программу будет запускать пользователь без администраторских прав). Во втором случае он не отображает информацию о многих процессах. Пользователь может выбрать пункт в меню "Показать информацию обо всех процессах". Появится стандартный запрос UAC (различается в зависимости от того, какие у пользователя права есть). Если разрешение получено - запускается новая копия Process Explorer, имеющая права администратора. Старая закрывается.
Согласитесь, что требовать права администратора только в случае, когда это необходимо, лучше, чем требовать их всегда (косой взгляд в сторону одной директивы).
Сам пример:
Согласитесь, что требовать права администратора только в случае, когда это необходимо, лучше, чем требовать их всегда (косой взгляд в сторону одной директивы).
Сам пример:
Код:
If Not IsAdmin() Then ; прав администратора нет
$answer = MsgBox(262144 + 256 + 48 + 4, Default, 'Программе необходимы полные администраторские права для работы. Предоставить их ей?')
If $answer = 6 Then ; нажата кнопка Да
ShellExecute(@AutoItExe, $CmdLineRaw, @WorkingDir , "runas", @SW_SHOWNORMAL)
; 1) путь к файлу
; 2) параметры
; 3) рабочий каталог
; 4) действие. В справке runas почему-то не задокументировано
; 5) флаг. В данном случае используется тот же, что и был использован при запуске самой программы
If Not @error Then ; если всё нормально - прекращаем работу
Exit
Else ; пользователь не разрешил скрипту внести изменения на компьютер
MsgBox(262144 + 48, Default, 'Разрешение не получено. Программа завершает свою работу.')
; можно работать дальше с обычными правами
Exit
EndIf
Else ; пользователь нажал нет в диалоге скрипта
MsgBox(262144 + 48, Default, 'Программе НУЖНЫ администраторские права для работы. Программа завершает свою работу.')
Exit
EndIf
Else ; права уже есть
MsgBox(262144 + 48, '', 'Пора захыватывать мир :)')
EndIf