一尘不染

单一方法的管理员权限

c#

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

像这样:

[RequireAdminRightsForThisMethod()]

private void TheMethod(){

    // Do something

}

阅读 278

收藏
2020-05-19

共1个答案

一尘不染

您可以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();
2020-05-19