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

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

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

[RequireAdminRightsForThisMethod()]

private void TheMethod(){

    // Do something

}

person lluismontero    schedule 07.01.2010    source источник
comment
Посмотрите здесь: omegacoder.com/?p=82   -  person JonH    schedule 07.01.2010
comment
Что бы вы от него хотели?   -  person SLaks    schedule 07.01.2010
comment
Просто примечание: если кто-то даст вам ответ с помощью WindowsIdentity.GetCurrent () или тому подобного, это будет работать только для winforms с места в карьер, а не для веб-страниц.   -  person diadem    schedule 07.01.2010
comment
74.125.47.132/search?q=cache:BcnrvCZth5EJ:www.omegacoder.com/   -  person Malfist    schedule 07.01.2010
comment
Я хочу, чтобы активный UAC запрашивал разрешения, когда приложение выполняет один метод.   -  person lluismontero    schedule 07.01.2010
comment
Это позволяет избежать использования метода, если у приложений нет разрешений. Мне нужно запустить UAC, чтобы запросить права администратора.   -  person lluismontero    schedule 07.01.2010
comment
Вы не можете сделать это автоматически.   -  person SLaks    schedule 07.01.2010
comment
Спасибо всем. Наконец, я перезапущу приложение с запросом прав администратора, когда мне нужно скопировать обновленные файлы.   -  person lluismontero    schedule 22.07.2010
comment
любая помощь для stackoverflow .com / questions / 8713995 /? :(   -  person Sangram Nandkhile    schedule 03.01.2012


Ответы (2)


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

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

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

Принципы безопасности и права местного администратора в C # .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();
person Dirk Vollmar    schedule 07.01.2010
comment
Если у вас есть учетные данные, можно изменить поток, чтобы олицетворять эти учетные данные администратора. Я не делал этого в .NET, но у меня есть в C ++ / Win32. - person kenny; 07.01.2010
comment
@kenny: Да, это, конечно, правда, но я сомневаюсь, что можно улучшить текущий процесс (который может потребоваться для определенных задач). См. Обсуждение здесь: social .msdn.microsoft.com / Forums / en-IE / windowscompatibility /. - person Dirk Vollmar; 07.01.2010
comment
Причина, по которой мне это нужно, заключается в том, что, когда приложение имеет обновление, ему необходимо скопировать файлы в папку приложения. Я не смогу сделать это без прав администратора. Я хочу активировать UAC при вызове метода CoppyFiles (). Надеюсь, это поможет понять мой вопрос. - person lluismontero; 07.01.2010
comment
@llu, вы знаете, что можете использовать объект / пространство имен directoryservices и проверить, является ли пользователь администратором, а затем реализовать остальную часть программы ... это означает, что if (admin) // сделайте это иначе // не делайте этого - person JonH; 07.01.2010
comment
Спасибо всем. Я перезапущу приложение с запросом прав администратора, когда мне нужно будет скопировать обновленные файлы. - person lluismontero; 07.01.2010
comment
любая помощь для stackoverflow .com / questions / 8713995 / :( - person Sangram Nandkhile; 03.01.2012
comment
Выдает Request for principal permission failed. Я использую WPF и пытаюсь записать файл внутри Program Files. - person Mangesh; 02.03.2015
comment
@MangeshGhotage: запрос будет работать только при запуске с повышенными правами. - person Dirk Vollmar; 02.03.2015
comment
Похоже, этот ответ больше недействителен: принципал устарел и больше не соблюдается средой выполнения. - person Kot; 03.03.2021

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

person SLaks    schedule 07.01.2010
comment
Но если мы поднимем все приложение с помощью администратора, тогда это приложение сможет получить доступ к папкам администратора через окно просмотра? Итак, если бы мы могли повысить эту функцию только с учетными данными администратора через программу (C #), это было бы полезно. Какие-либо предложения ? - person Susarla Nikhilesh; 27.12.2018