Действительно ли возможно потребовать прав администратора для одного отдельного метода?
Что-то вроде этого:
[RequireAdminRightsForThisMethod()]
private void TheMethod(){
// Do something
}
Вы можете добавить в свой метод атрибут PrincipalPermission
для требования административных привилегий для его выполнения:
[PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN\Administrators")]
public void MyMethod()
{
}
Это более подробно описано в следующей статье:
Если вы ищете способ поднять уже существующий процесс, я сомневаюсь, что это возможно, так как привилегии администратора даются на уровне процесса при запуске (смотрите этот связанный question). Чтобы получить желаемое поведение, вам придется запустить приложение "от имени администратора".
Однако, существуют некоторые хитрости, которые могут позволить вам делать то, что вы хотите, но будьте предупреждены, что это может привести к серьезным рискам для безопасности. См. следующую тему на MSDN форумах:
Запуск MyElevatedCom Server без запроса учетных данных администратора от Standard User
Update (из комментария)
Похоже, что если обновление требует повышения уровня вашего приложения, то лучше всего сделать это отдельным процессом (либо другим исполняемым файлом, либо вашим приложением, вызванным с помощью переключателя командной строки). Для этого отдельного процесса вы можете запросить повышение уровня следующим образом:
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();
Метод может требовать для выполнения привилегий администратора, но невозможно автоматически повысить их значение до Admin при выполнении метода.