69

是否可以要求一种方法具有管理员权限?

像这样的东西:

[RequireAdminRightsForThisMethod()]

private void TheMethod(){

    // Do something

}
4

2 回答 2

87

您可以向您的方法添加一个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();
于 2010-01-07T16:31:11.720 回答
16

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

于 2010-01-07T16:27:25.183 回答