2010-01-07 337 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