Права администратора для одного метода - PullRequest
63 голосов
/ 07 января 2010

Можно ли требовать права администратора для одного метода?

Примерно так:

[RequireAdminRightsForThisMethod()]

private void TheMethod(){

    // Do something

}

Ответы [ 2 ]

83 голосов
/ 07 января 2010

Вы можете добавить атрибут PrincipalPermission к вашему методу, чтобы требовать административные привилегии для его выполнения:

[PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN\Administrators")]
public void MyMethod()
{
}

Это более подробно описано в следующей статье:

Принципы безопасности и права локального администратора в C # .Net

Если вы ищете способ поднять уже существующийПроцесс Я сомневаюсь, что это возможно, так как права администратора передаются процессу на уровне процесса при запуске (см. этот связанный вопрос ).Вам нужно запустить приложение «как администратор», чтобы получить желаемое поведение.

Однако есть некоторые приемы, которые могут позволить вам делать то, что вы хотите, но имейте в виду, что это может создать серьезные угрозы безопасности.,См. Следующую ветку на форумах MSDN:

Запуск сервера MyElevatedCom без запроса учетных данных администратора от обычного пользователя

Обновление (из комментария)

Кажется, что если обновление требует повышения прав, обновление вашего приложения лучше всего выполнять отдельным процессом (либо другим исполняемым файлом, либо приложением, вызываемым с помощью переключателя командной строки).Для этого отдельного процесса вы можете запросить повышение прав следующим образом:

var psi = new ProcessStartInfo();
psi.FileName = "path to update.exe";
psi.Arguments = "arguments for update.exe";
psi.Verb = "runas";

var process = new Process();
process.StartInfo = psi;
process.Start();   
process.WaitForExit();
15 голосов
/ 07 января 2010

Для запуска метода могут потребоваться административные привилегии, но при выполнении метода невозможно автоматически повысить уровень до Admin.

...