1.对某个方法设置管理员权限运行(未考证)(假的,必须以管理员权限启动,不然报错)
[PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN\Administrators")]public void MyMethod(){}
2.程序以管理员权限启动(通过修改项目配置)
方法1:添加mainfast文件,添加下面的代码:
3.程序中检测并以管理员权限启动
以下代码,虽然是弹出 管理员权限启动提示窗口,但是实际好像没有生效(不能创建文件夹,而右击菜单--管理员权限启动的话则可以)System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);//判断当前登录用户是否为管理员if (principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator)){ return;}else{ //创建启动对象 System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.UseShellExecute = true; startInfo.WorkingDirectory = Environment.CurrentDirectory; startInfo.FileName = Application.ExecutablePath; //设置启动动作,确保以管理员身份运行 startInfo.Verb = "runas"; try { System.Diagnostics.Process.Start(startInfo); } catch { return; } //注意!!!!下面的代码是错误的,用下面的方式退出的话,重启不会真正的以管理员权限启动。需要直接从Main中return //太奇葩了 //Application.Exit(); }
2017/6/30 更新
如何检测需要管理员权限呢? 为了提升用户体验,避免不必要的权限请求。 这里提供一个土方法, 直接在程序目录下读写文件,如果有权限异常,那么就需要提升权限。没有则不需要。 要考虑的问题,读、写、创建 文件、目录 要周全。