2014-02-20 2 views
0

Сценарий заключается в том, что я запускаю службу как admin.Как временно понизить отметку

У нас есть выноска, которое запускает собственный код (думаю, скрипты). Он использует компиляцию кода для создания сборки и создания типа и вызова метода (на основе кода).

Я хочу временно удалить привилегии администратора на время выноска, а затем восстановить их потом.

+0

Итак, что тебя останавливает? – Tarec

+0

Я понятия не имею, как это сделать. Я представляю себе создание класса, который реализует IDisposable и отменяет возвышение в конструкторе и восстанавливает его в деструкторе, но я не знаю, что вызовы должны сбросить высоту и восстановить. Думаю, мне, возможно, понадобится узнать текущее «состояние» возвышения, чтобы восстановить его позже. – Derek

+0

Не могли бы вы вызвать выноску из отдельного процесса (который запускается из службы)? Если это возможно, см. Http://stackoverflow.com/q/1173630. – AlexD

ответ

0

Я не думаю, что вы можете «сбросить» привилегии так, как вы описываете; ваша служба работает как пользователь, и этому пользователю разрешен определенный доступ. Вы можете попросить Windows временно предоставить вам больше разрешений (что и есть UAC), но вы не можете попросить его дать вам меньше!

Я бы создал второго пользователя в системе для запуска сценариев (с соответствующим образом более низким уровнем доступа) и олицетворял этого пользователя в течение всего пользовательского кода.

Оказывается, я не знаю, о чем говорю. Согласно этой ссылке UAC реализуется обратным образом, создавая ограниченный набор разрешений и управляя кодом в этом контексте.

http://weblogs.asp.net/kennykerr/archive/2006/09/29/Windows-Vista-for-Developers-1320-Part-4-1320-User-Account-Control.aspx

+0

Вы совершенно верны. К сожалению ... – MarcE