發(fā)文章
發(fā)文工具
撰寫
網(wǎng)文摘手
文檔
視頻
思維導(dǎo)圖
隨筆
相冊(cè)
原創(chuàng)同步助手
其他工具
圖片轉(zhuǎn)文字
文件清理
AI助手
留言交流
在Vista 和 Windows 7 及更新版本的操作系統(tǒng),增加了 UAC(用戶賬戶控制) 的安全機(jī)制,如果 UAC 被打開,用戶即使以管理員權(quán)限登錄,其應(yīng)用程序默認(rèn)情況下也無法對(duì)系統(tǒng)目錄、系統(tǒng)注冊(cè)表等可能影響系統(tǒng)正常運(yùn)行的設(shè)置進(jìn)行寫操作。這個(gè)機(jī)制大大增強(qiáng)了系統(tǒng)的安全性,但對(duì)應(yīng)用程序開發(fā)者來說,我們不能強(qiáng)迫用戶去關(guān)閉UAC,但有時(shí)我們開發(fā)的應(yīng)用程序又需要以 Administrator 的方式運(yùn)行,如何實(shí)現(xiàn)這樣的功能呢?
下面演示 C# 程序如何實(shí)現(xiàn)提示用戶以管理員權(quán)限運(yùn)行。
本例以WinForm程序演示,新建一項(xiàng)目生成后進(jìn)行相應(yīng)修改:
方法一:通過 System.Diagnostics.Process.Start() 方式啟動(dòng):
實(shí)現(xiàn)方法: 修改默認(rèn)生成的Program文件,修改后的代碼如下:
由于已經(jīng)在代碼上做了注釋,所以不再詳細(xì)說明;
1 static class Program 2 { 3 [STAThread] 4 static void Main() 5 { 6 Application.EnableVisualStyles(); 7 Application.SetCompatibleTextRenderingDefault(false); 8 9 /** 10 * 當(dāng)前用戶是管理員的時(shí)候,直接啟動(dòng)應(yīng)用程序 11 * 如果不是管理員,則使用啟動(dòng)對(duì)象啟動(dòng)程序,以確保使用管理員身份運(yùn)行 12 */ 13 //獲得當(dāng)前登錄的Windows用戶標(biāo)示 14 System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent(); 15 System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity); 16 //判斷當(dāng)前登錄用戶是否為管理員 17 if (principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator)) 18 { 19 //如果是管理員,則直接運(yùn)行 20 Application.Run(new Form1()); 21 } 22 else 23 { 24 //創(chuàng)建啟動(dòng)對(duì)象 25 System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 26 startInfo.UseShellExecute = true; 27 startInfo.WorkingDirectory = Environment.CurrentDirectory; 28 startInfo.FileName = Application.ExecutablePath; 29 //設(shè)置啟動(dòng)動(dòng)作,確保以管理員身份運(yùn)行 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() 方式外部調(diào)用啟動(dòng),所以直接通過VS運(yùn)行時(shí),是不會(huì)提示VS也需要管理員權(quán)限,只有程序本身需要管理員權(quán)限,與生成應(yīng)用程序的程序不同。這點(diǎn)是和方法二實(shí)現(xiàn)的主要不同之處。
本文地址:http://www.cnblogs.com/Interkey/p/RunAsAdmin.html
方法二:通過添加應(yīng)用程序清單文件:
在 項(xiàng)目 上 添加新項(xiàng) 選擇“應(yīng)用程序清單文件” 然后單擊 添加 按鈕
添加后,默認(rèn)打開app.manifest文件,將:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
修改為:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
然后打開 項(xiàng)目屬性 ,將 應(yīng)用程序 標(biāo)簽頁中的 資源 中的 清單 修改為新建的 app.manifest。
重新生成項(xiàng)目,再次打開程序時(shí)就會(huì)提示 需要以管理員權(quán)限運(yùn)行。
需要注意的是:如果在VS中 啟動(dòng)調(diào)試 的話,就會(huì)提示 此任務(wù)要求應(yīng)用程序具有提升的權(quán)限。如下圖:
選擇 使用其他憑據(jù)重新啟動(dòng) 即可。
方法三:直接修改程序文件的屬性
右擊程序文件,在彈出的屬性對(duì)話框中的 兼容性 標(biāo)簽頁中
勾選“以管理員身份運(yùn)行此程序”即可。
如果有興趣還可以繼續(xù)查看下面的鏈接:
http://www.cnblogs.com/Lemon_s/archive/2011/07/28/2119222.html
http://www.cnblogs.com/shenchao/archive/2013/03/05/2944660.html
希望能幫到大家~~~
作者:Cosmic_Spy 出處:http://www.cnblogs.com/Interkey/ 本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
來自: 昵稱10504424 > 《C#》
0條評(píng)論
發(fā)表
請(qǐng)遵守用戶 評(píng)論公約
C#正確方式讓程序以管理員權(quán)限啟動(dòng)
Vista UAC中把應(yīng)用程序標(biāo)注為“需要管理員權(quán)限”的四種方法
Vista UAC中把應(yīng)用程序標(biāo)注為“需要管理員權(quán)限”的四種方法在Microsoft 的UACBlog里對(duì)此有過敘述。將這個(gè)manifest文件命名為Exe名+.manifest, 如test.exe.manifest 然后用mt.exe綁定 Mt.exe –main...
windowsUAC白名單
如果程序必須 [以管理員身份運(yùn)行] 啟動(dòng),那么推薦使用這一種方式,不需要管理員權(quán)限的推薦其他方式,因?yàn)槭褂糜?jì)劃任務(wù)啟動(dòng)程序時(shí),windows 不會(huì)彈出討厭的“允許某某程序?qū)δ愕碾娔X進(jìn)行修改嗎的窗口”...
Win8如何使用管理員權(quán)限運(yùn)行CMD
Win8如何使用管理員權(quán)限運(yùn)行CMDWin8使用管理員權(quán)限運(yùn)行CMD的方法如下:1、按win鍵+R打開運(yùn)行,下圖為win鍵。2、在打開的運(yùn)行中輸入CMD打...
如何跳過UAC以管理員身份啟動(dòng)程序
如何跳過UAC以管理員身份啟動(dòng)程序。通過以上三種方式中的一種都可以打開任務(wù)計(jì)劃程序,那么下面就是添加任務(wù)了。在任務(wù)計(jì)劃程序的右上角...
CreateProcess返回740錯(cuò)誤碼
CreateProcess返回740錯(cuò)誤碼。該錯(cuò)誤碼的原因是權(quán)限問題,理論上認(rèn)為是執(zhí)行這代碼的程序權(quán)限不夠的問題,但有時(shí)卻不是。解決辦法1:調(diào)用程序以管理員權(quán)限運(yùn)行。解決辦法2:即調(diào)用程序以管理員的權(quán)限運(yùn)...
SECURITY_ATTRIBUTES 設(shè)置低權(quán)限
比如 Service 程序和一般應(yīng)用程序用共享內(nèi)存的方式來通訊,CreateFileMapping 的第二個(gè)參數(shù)我們往往都是填 NULL 使用默認(rèn)權(quán)限(Service 的默認(rèn)權(quán)限自然是 Service 級(jí)別的啦),于是在 Vista 以上的系統(tǒng)中...
BOIS密碼設(shè)置和解除方法
BOIS密碼設(shè)置和解除方法BOIS密碼設(shè)置和解除方法。BIOS密碼也稱"CMOS密碼",密碼設(shè)置的主要目的有:"BIOS FEATURES SETUP"(BIOS功能設(shè)置) "SUPERVISOR PASSWORD"(...
IE11打不開,只能以管理員身份運(yùn)行
IE11打不開,只能以管理員身份運(yùn)行。3、打開權(quán)限后,點(diǎn)擊“高級(jí)”,先重新開啟繼承,再刪除所有main自定義的權(quán)限即可。
微信掃碼,在手機(jī)上查看選中內(nèi)容