2010-11-03 34 views
8

我在我的應用程序中需要管理員權限。C#應用程序中的管理權限提示彈出窗口

我想要的是當我點擊按鈕執行該功能,它應該要求管理員用戶名和密碼。 (啓動UAC對話框,同時在該按鈕上顯示圖標)

可能嗎?

alt text

PS:我知道正確的清單文件進行修改啓動與管理中的應用。

此功能是大型程序的一部分,不能轉移到單獨的程序。

+0

一旦完全授予管理員權限,您必須重新啓動應用程序,以便您的應用程序能夠利用新權限。因此,爲什麼@Rob建議你使用一個單獨的應用程序。我可以給出的最佳建議是,如果您真的需要,最初啓動應用程序時請求完全訪問權限。 – 2010-11-03 09:05:27

+0

我很欣賞你的建議,但我們的應用程序甚至可以由來賓用戶執行(這是要求),並且有時我們需要管理員權限。 – Raj 2010-11-03 09:09:28

+0

@Raj我相信UAC不能像那樣工作。祝你好運:) – 2010-11-03 09:12:07

回答

4

實現此目的的最佳方法是擁有一個輔助可執行文件,其中包含需要管理權限的代碼,這些代碼會正確顯示。當您的應用程序需要執行需要管理權限的代碼時,請致電該程序。

例如:

MyProgram.exe - 沒有清單
MyProgramElevated.exe - 具有清單指示它需要管理員權限

當用作升高它MyProgram.exe需要執行一個動作執行MyProgramElevated.exe ,通過命令行參數來指示需要提升的任務。

+0

這是我想要做的第一件事,但這個功能是大型程序的一部分,它不能轉移到一個單獨的程序。 – Raj 2010-11-03 08:57:11

+1

@Raj,我不知道有什麼方法可以獲得「完整」令牌,而不是按照我的建議進行操作。我已經爲你的問題增加了一些標籤,希望能讓它更加明顯,因爲別人可能知道我不知道的解決方案=) – Rob 2010-11-03 08:58:41

+0

非常感謝Rob .. :) – Raj 2010-11-03 08:59:35

5

你可以使用StockIcons.Shield從Windows API Code Pack

您可以運行與管理權限的程序不改變使用「運行方式」動詞程序清單中的圖標(你也可以用它來重新啓動你的擁有管理員權限的程序):

Process.Start(new ProcessStartInfo() 
    { 
     Verb = "runas", 
     FileName = "Notepad.exe", 
    }); 

有一個COM API,讓你創建一個非管理員進程中管理員權限的COM對象,但我認爲這是非常困難的使用從.NET應用程序。

相關問題