单个方法的管理员权限

时间:2010-01-07 16:24:33

标签: c# permissions administrator

是否可以要求单个方法的管理员权限?

这样的事情:

[RequireAdminRightsForThisMethod()]

private void TheMethod(){

    // Do something

}

2 个答案:

答案 0 :(得分:83)

您可以在方法中添加PrincipalPermission属性,以要求其执行的管理权限:

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

以下文章对此进行了更详细的描述:

  

<强> Security Principles and Local Admin Rights in C# .Net

如果您正在寻找提升现有流程的方法,我怀疑这是可行的,因为在启动时会在流程级别为流程提供管理员权限(请参阅此相关question)。您必须“以管理员身份”运行您的应用程序才能获得所需的行为。

但是,有一些技巧可能会让你做你想做的事情,但要注意这可能会带来严重的安全风险。请参阅MSDN论坛中的以下主题:

  

<强> Launching MyElevatedCom Server without prompting Administrator credentialls from Standard User

更新(来自评论)

似乎如果更新需要提升,则应用程序更新最好由单独的进程(另一个可执行文件或使用命令行开关调用的应用程序)完成。对于该单独的流程,您可以按如下方式请求提升:

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

答案 1 :(得分:15)

方法可能需要管理权限才能运行,但在执行方法时无法自动提升为Admin。