Права администратора для одного метода

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

Что-то вроде этого:

[RequireAdminRightsForThisMethod()]

private void TheMethod(){

    // Do something

}

Ответ 1

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

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

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

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

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

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

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

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

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

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();

Ответ 2

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