2010-01-07 144 views
61

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

事情是这样的:

[RequireAdminRightsForThisMethod()] 

private void TheMethod(){ 

    // Do something 

} 
+0

您想要它做什么? – SLaks 2010-01-07 16:29:21

+1

只是一个注释:如果有人给你一个与WindowsIdentity.GetCurrent()或类似的答案,这将只适用于蝙蝠而不是网页的winforms。 – diadem 2010-01-07 16:30:00

+0

我希望当应用程序执行一种方法时,UAC要求权限。 – lluismontero 2010-01-07 16:32:24

回答

83

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

Security Principles and Local Admin Rights in C# .Net

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

这在下面的文章中详细描述

如果您正在寻找一种方法提升已经存在的进程我怀疑这是可能的,因为管理员权限是在进程级别给启动时的进程给出的(参见相关的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(); 
+0

有可能,如果你有证书来改变线程来模拟这些管理凭据。我没有在.NET中完成它,但我有在C + +/Win32。 – kenny 2010-01-07 16:49:20

+0

搞笑我张贴相同的链接。 ..有一段时间在你之前...... – JonH 2010-01-07 16:51:23

+0

@kenny:是的,这当然是对的,但我怀疑是否有可能提升当前流程(这对于某些任务来说是必需的)。请参阅此处的讨论:http://social.msdn.microsoft.com/Forums/en-IE/windowscompatibility/thread/831ffd77-6bc4-4857-9947-d74923184b0b。 – 2010-01-07 16:54:38

15

的方法可能需要管理员权限才能运行,但它不可能执行方法时自动提升到管理员。

+5

为什么这会得到downvoted? – 2010-01-07 16:40:05