C#程式以管理員許可權執行
在Vista 和 Windows 7 及更新版本的作業系統,增加了 UAC(使用者賬戶控制) 的安全機制,如果 UAC 被開啟,使用者即使以管理員許可權登入,其應用程式預設情況下也無法對系統目錄、系統登錄檔等可能影響系統正常執行的設定進行寫操作。這個機制大大增強了系統的安全性,但對應用程式開發者來說,我們不能強迫使用者去關閉UAC,但有時我們開發的應用程式又需要以 Administrator 的方式執行,如何實現這樣的功能呢?
下面演示 C# 程式如何實現提示使用者以管理員許可權執行。
本例以WinForm程式演示,新建一專案生成後進行相應修改:
方法一:通過 System.Diagnostics.Process.Start() 方式啟動:
實現方法: 修改預設生成的Program檔案,修改後的程式碼如下:
由於已經在程式碼上做了註釋,所以不再詳細說明;
1 static class Program 2 { 3 [STAThread] 4 static void Main() 5 { 6 Application.EnableVisualStyles(); 7 Application.SetCompatibleTextRenderingDefault(false); 8 9/** 10 * 當前使用者是管理員的時候,直接啟動應用程式 11 * 如果不是管理員,則使用啟動物件啟動程式,以確保使用管理員身份執行 12 */ 13 //獲得當前登入的Windows使用者標示 14 System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent(); 15 System.Security.Principal.WindowsPrincipal principal = newSystem.Security.Principal.WindowsPrincipal(identity); 16 //判斷當前登入使用者是否為管理員 17 if (principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator)) 18 { 19 //如果是管理員,則直接執行 20 Application.Run(new Form1()); 21 } 22 else 23 { 24 //建立啟動物件 25 System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 26 startInfo.UseShellExecute = true; 27 startInfo.WorkingDirectory = Environment.CurrentDirectory; 28 startInfo.FileName = Application.ExecutablePath; 29 //設定啟動動作,確保以管理員身份執行 30 startInfo.Verb = "runas"; 31 try 32 { 33 System.Diagnostics.Process.Start(startInfo); 34 } 35 catch 36 { 37 return; 38 } 39 //退出 40 Application.Exit(); 41 } 42 } 43 }
效果:由於是通過System.Diagnostics.Process.Start() 方式外部呼叫啟動,所以直接通過VS執行時,是不會提示VS也需要管理員許可權,只有程式本身需要管理員許可權,與生成應用程式的程式不同。這點是和方法二實現的主要不同之處。
方法二:通過新增應用程式清單檔案:
在 專案 上 新增新項 選擇“應用程式清單檔案” 然後單擊 新增 按鈕
新增後,預設開啟app.manifest檔案,將:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
修改為:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
然後開啟 專案屬性 ,將 應用程式 標籤頁中的 資源 中的 清單 修改為新建的 app.manifest。
重新生成專案,再次開啟程式時就會提示 需要以管理員許可權執行。
需要注意的是:如果在VS中 啟動除錯 的話,就會提示 此任務要求應用程式具有提升的許可權。如下圖:
選擇 使用其他憑據重新啟動 即可。
方法三:直接修改程式檔案的屬性
右擊程式檔案,在彈出的屬性對話方塊中的 相容性 標籤頁中
勾選“以管理員身份執行此程式”即可。
希望能幫到大家~~~