User Account Control (UAC)是從windows vista系統開始增加的一個安全控制組件。正常情況下,應用程序都運行在較低的權限級別上,但有時不得不強制要求當前進程以較高的安全級別上運行,這時就希望程序自身能夠強制要求用戶提升當前進程的權限,下面的方法就實現了權限檢測與提升。
/// <summary> /// 檢查當前進程是否以administrator身份運行 /// </summary> /// <returns> /// </returns> public bool IsRunAsAdmin() { WindowsIdentity id = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(id); return principal.IsInRole(WindowsBuiltInRole.Administrator); }
如果當前進程不是以Administrator身份運行,則提升進程權限:
public void Elevate() { // 如果不是以administrator身份運行
if (!IsRunAsAdmin()) { // 以administrator身份,重啓自己 ProcessStartInfo proc = new ProcessStartInfo(); proc.UseShellExecute = true; proc.WorkingDirectory = Environment.CurrentDirectory; proc.FileName = Application.ExecutablePath; proc.Verb = "runas"; try { Process.Start(proc); } catch { // 如果用戶拒絕提升權限,直接退出 } Application.Exit(); // 退出 } else { MessageBox.Show("正以administrator運行當前進程", "UAC"); } }
不僅僅是在UAC控制下,即便是在Windows XP下以非管理員用戶啓動程序,也會彈出runas對話框,要求以管理員身份運行,這樣就能保證程序總是在最高用戶權限下運行!