【问题标题】:Admin rights for a single method单一方法的管理员权限
【发布时间】:2011-01-02 13:42:26
【问题描述】:

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

类似这样的:

[RequireAdminRightsForThisMethod()]

private void TheMethod(){

    // Do something

}

【问题讨论】:

标签: c# permissions administrator


【解决方案1】:

您可以在您的方法中添加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();

【讨论】:

  • 如果您有凭据,可以更改线程以模拟这些管理员凭据。我没有在 .NET 中做过,但我在 C++/Win32 中做过。
  • @kenny:是的,确实如此,但我怀疑是否有可能提升当前流程(某些任务需要这样做)。请参阅此处的讨论:social.msdn.microsoft.com/Forums/en-IE/windowscompatibility/…
  • 我需要它的原因是因为当应用程序有更新时,它需要将文件复制到应用程序文件夹。如果没有管理员权限,我无法做到这一点。我想要的是在调用“CoppyFiles()”方法时触发 UAC。希望这有助于理解我的问题。
  • @lluis 你知道你可以使用 directoryservices 对象/命名空间并检查用户是否是管理员然后实现程序的其余部分...意思是 if(admin)//do this else //不要这样做
  • 抛出 Request for principal permission failed. 我正在使用 WPF 并尝试在 Program Files 中写入文件。
【解决方案2】:

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

【讨论】:

  • 但是如果我们使用 admin 提升整个应用程序,那么该应用程序可以通过浏览窗口访问 admin 文件夹吗?因此,如果我们只能通过程序(c#)使用管理员凭据提升该功能,那将很有帮助。有什么建议吗?
猜你喜欢
  • 2023-03-31
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 2015-03-03
  • 1970-01-01
相关资源
最近更新 更多