Кажется, что повышение привилегий - обычное дело, с которым борются большинство разработчиков, поскольку в большинстве случаев они просто не имеют этого.Я, например, делаю, но борюсь с массивной подпрограммой Background Worker, и я пытаюсь сохранить свой код локально для класса, который будет его использовать.Учитывая количество кода и ссылок, которые создает мой фоновый работник, когда он завершает работу внутри метода-обработчика RunWorkerCompleted, его непросто принять это как жизнеспособную альтернативу:
HOMEWORK 1:
РАБОТА С 2:
РАБОТА С 3:
Фоновый работник просто слишком сильно зависит от моего класса MainForm, чтобы я подумал о том, чтобы перенести все решение в отдельный процесс с привилегиями администратора.Это включает в себя слишком много рубок и изменений.
Омега-кодер:
Прочитав CAS для экзамена 70-536, я знаю,большинства терминов в этом примере выше, но я не смог понять, как и почему это работает?Может кто-нибудь объяснить, почему разрешение предоставлено методу ManagersOnly?Как только PrincipalPolicy изменяется на WindowsPrincipal, следующие два шага выглядят как обычные операторы создания объектов, представленные примерно так:
System.AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal, IPrincipal, IIdentity);
Очевидно, что такой перегрузки не существует, но она очень ясно показывает, что делает эта перегрузка,
Вопрос 1: Как пример OmegaCoders достигает этого эффекта?Потому что он определенно работает, так как мой пользователь является частью группы «BUILTIN \ Administrators».Я ищу ответ, основанный на литературных источниках, так что пойдите как можно подробнее.
ОБНОВЛЕНИЕ 1:
Вопрос2: Как бы я вернул PrincipalPolicy обратно к тому, что было раньше ... как только метод вернется, мне не нужно, чтобы PrincipalPolicy все еще было установлено значение «WindowsPrincipal» ???Так что приложение может продолжать работать как пользователь с более низкими привилегиями, как я и предполагал.
Вопрос 3: Как только возвращается метод 'ManagersOnly', отклоняется ли разрешение?Это ограничено жизненным циклом метода?
System.AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.NoPrincipal);
* ОБНОВЛЕНИЕ 2: *
Это оказывается трудным делом, так как на моей машине разработчика Win7 Pro я могутестировать и запускать что угодно, но когда я попытался протестировать некоторый код на простом домашнем ноутбуке с Win7, я обнаружил, что разрешения запрещены.В связи с этим возникают вопросы, связанные с изменением PrincipalPolicy на WindowsPrincipal, который работает не для всех пользователей Vista и Win7, поскольку многие даже не входят в группу администраторов.Так что этот вариант бесполезен ... Сидя на этом маленьком ноутбуке, становится довольно очевидным, что это не то решение, которое мне нужно.
IGNORE PREVIOUS Qs - с моим собственным исследованием я сделал, что они неосуществимы.
Вопрос 4: как можно программно и временно выдать себя за администратора в коде?