1. 程式人生 > >C#程式以管理員許可權執行

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 = new
System.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中 啟動除錯 的話,就會提示 此任務要求應用程式具有提升的許可權。如下圖:

提升許可權

選擇 使用其他憑據重新啟動 即可。

方法三:直接修改程式檔案的屬性

右擊程式檔案,在彈出的屬性對話方塊中的 相容性 標籤頁中

勾選“以管理員身份執行此程式”即可。

 設定許可權等級

希望能幫到大家~~~