win8提升winform软件的权限

时间:2022-06-10 14:58:22
在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