2010-08-07 5 views
1

Похоже, что возвышение привилегий - это обычная вещь, с которой большинство разработчиков сражаются, поскольку большую часть времени они просто не имеют ее. Я для одного, но я борюсь с массивным фоном Worker, и я пытаюсь сохранить свой код локальным в классе, который будет его использовать. Учитывая объем кода и ссылки мой фон работник делает, когда он заканчивает внутри метода обработчика «RunWorkerCompleted» ее доказать, вольно сложном, чтобы принять это в качестве жизнеспособной альтернативы:Как олицетворять встроенную роль администратора Windows для WinForms, C# App?

HOMEWORK 1:

HOMEWORK 2:

HOMEWORK 3:

Существует слишком большая зависимость от моего MainForm класс моим фоновым рабочим для меня, чтобы рассмотреть возможность доставки всего решения в отдельный процесс с помощью «Администраторов». Это предполагает слишком много измельчения и изменения.

Omega Coder:

Начитавшись в CAS для 70-536 экзамена, я знаю большинство терминов в этом примере выше, но я не смог понять, как и почему это работает? Может ли кто-нибудь объяснить, почему разрешение предоставляется методу ManagersOnly? Как когда-то PrincipalPolicy изменяется на WindowsPrincipal, следующие два шага выглядит как обычные заявления объекта инстанцирования, как поставленный на что-то вроде:

System.AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal, IPrincipal, IIdentity); 

Очевидно, что нет такой перегрузки не существует, но его очень ясно, что делает это перегрузка.

Вопрос 1: Как пример OmegaCoders достигает такого эффекта? Поскольку он определенно работает, так как мой пользователь входит в группу «BUILTIN \ Administrators». Я ищу литературный ответ, так что вам нужно столько деталей, сколько вы чувствуете.

UPDATE 1:

Вопрос 2: Как бы я вернуться в PrincipalPolicy вернуться к тому, что было раньше ... когда-то метод возвращает мне не нужно PrincipalPolicy еще значение ' WindowsPrincipal '??? Таким образом, приложение может работать как пользователь с более низким приоритетом, как я предполагал.

Вопрос 3: Как только метод «ManagersOnly» возвращается, разрешение отбрасывается? Является ли это областью жизни метода?

System.AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.NoPrincipal); 

* UPDATE 2: *

Это оказывается трудным, так как на моем Win7 Pro Dev машины я могу проверить и запустить что-нибудь, но когда я попытался тестируя код на простом Win7 Home ноутбук Я выяснил, что разрешениям отказано. Что вызывает вопросы, связанные с изменением принципа PrincipalPolicy на «WindowsPrincipal», не работает для всех пользователей Vista и Win7, поскольку многие из них даже не являются частью группы пользователей admin. Так что этот вариант бесполезен ... Сидя на этом маленьком ноутбуке, он становится довольно очевидным, и это не то решение, которое мне нужно.

IGNORE PREVIOUS Qs - с моими собственными исследованиями, которые я сделал, они невозможны.

Вопрос 4: как вы идете о том, чтобы выдать себя за администратора программным и временным образом в коде?

ответ

1

Короткий ответ НЕТ.

Похоже, что после того, как все, что я делал, было прогромматичным способом повышения разрешений метода, так как CAS дополняет RBS, поэтому, если пользователь не является частью правой группы. Тогда нет смысла даже получать доступ к правам администратора, поскольку rbs сообщает cas, что пользователь не является частью группы, поэтому запрос отскакивается и разрешение отклоняется. Результатом является исключение.

Если пользователь является частью группы, то вам нужны i.e Administrators, а затем изменение Domains PrincipalPolicy даст вам временное решение, но оно не обслуживает пользователей, которые просто не входят в группы пользователей администратора. То, где вышеупомянутое решение разваливается.

Долгий ответ: отправьте код проблемы в маленький отдельный файл .exe и выполните его отдельно.