小虾9527

导航

 
在win8系统中,微软提高了系统盘文件的权限,提高了其他系统操作的权限,因此一些桌面应用程序在运行时会报一些权限错误,比如C盘文件操作权限,或注册表操作无权限等。
我之前开发过一款用笔记本一键架设无线网络的程序WIFIHelper,在win7下运行正常,但是到win8下运行的时候,就读取不到系统网卡设备信息,一直想去解决,但是因为时间关系,没能解决。今天上网查了一下资料,发现在C#的System.Security.Principal命名空间下有一些windows系统用户账户的操作,经初步了解,已经可以解决权限问题。只需要在Program类中增加一个判断方法,代码如下:
        
 1         private static bool IsAdministrator()
 2         {
 3             var identity = WindowsIdentity.GetCurrent();
 4             if (identity != null)
 5             {
 6                 var principal = new WindowsPrincipal(identity);
 7                 return principal.IsInRole(WindowsBuiltInRole.Administrator);
 8             }
 9             return false;
10         }    

 

这个方法返回当前用户是否具有管理员权限。
在Main方法里编写代码:
        
 1         /// <summary>
 2         /// 应用程序的主入口点。
 3         /// </summary>
 4         [STAThread]
 5         private static void Main(string[] args)
 6         {
 7             if (IsAdministrator())
 8             {//如果具有管理员权限,直接运行程序
 9                 Application.EnableVisualStyles();
10                 Application.SetCompatibleTextRenderingDefault(false);
11                 Application.Run(new FrmMain());
12             }
13             else
14             {//如果不具有管理员权限,则以管理员身份执行可执行程序
15                 var startInfo = new ProcessStartInfo
16                 {
17                     FileName = Application.ExecutablePath,//进程目标文件
18                     Arguments = string.Join(" ", args),//进程参数
19                     Verb = "runas"//管理员权限
20                 };
21                 Process.Start(startInfo);
22             }
23         }

 

注:需要引入命名空间System.Security.Principal
posted on 2016-02-26 14:03  小虾9527  阅读(265)  评论(0编辑  收藏  举报