日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

(转)C#程序以管理员权限运行

發(fā)布時(shí)間:2023/12/24 综合教程 48 生活家
生活随笔 收集整理的這篇文章主要介紹了 (转)C#程序以管理员权限运行 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C#程序以管理員權(quán)限運(yùn)行
在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)簽頁(yè)中的 資源 中的 清單 修改為新建的 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è)中

勾選“以管理員身份運(yùn)行此程序”即可。


判斷程序是否以管理員身份運(yùn)行

需要添加命名空間:

using System.Security.Principal;

 1 /// <summary>
 2     /// 確定當(dāng)前主體是否屬于具有指定 Administrator 的 Windows 用戶組
 3     /// </summary>
 4     /// <returns>如果當(dāng)前主體是指定的 Administrator 用戶組的成員,則為 true;否則為 false。</returns>
 5     public static bool IsAdministrator()
 6     {
 7         bool result;
 8         try
 9         {
10             WindowsIdentity identity = WindowsIdentity.GetCurrent();
11             WindowsPrincipal principal = new WindowsPrincipal(identity);
12             result = principal.IsInRole(WindowsBuiltInRole.Administrator);
13 
14             //http://www.cnblogs.com/Interkey/p/RunAsAdmin.html
15             //AppDomain domain = Thread.GetDomain();
16             //domain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
17             //WindowsPrincipal windowsPrincipal = (WindowsPrincipal)Thread.CurrentPrincipal;
18             //result = windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
19         }
20         catch
21         {
22             result = false;
23         }
24         return result;
25     }

如果有興趣還可以繼續(xù)查看下面的鏈接:

http://www.cnblogs.com/Lemon_s/archive/2011/07/28/2119222.html

http://www.cnblogs.com/shenchao/archive/2013/03/05/2944660.html

總結(jié)

以上是生活随笔為你收集整理的(转)C#程序以管理员权限运行的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。