using System.Diagnostics; using System.Runtime.Versioning; using System.Security.Principal; using XFEExtension.NetCore.Exceptions; namespace XFEExtension.NetCore.PermissionExtension; #if WINDOWS /// /// UAC权限(管理员权限) /// [SupportedOSPlatform("windows")] public static class AdministratorPermission { /// /// 当前请求的状态 /// public static CurrentPermissionState PermissionState { get; private set; } /// /// 当前是否以管理员身份运行 /// /// public static bool IsAdministrator() { var identity = WindowsIdentity.GetCurrent(); var principal = new WindowsPrincipal(identity); return principal.IsInRole(WindowsBuiltInRole.Administrator); } /// /// 请求管理员权限并重启程序 /// public static void GetPermissionAndReboot() { try { var startInfo = new ProcessStartInfo { UseShellExecute = true, WorkingDirectory = Environment.CurrentDirectory, FileName = Environment.ProcessPath, Verb = "runas" // 使用UAC权限提升 }; Process.Start(startInfo); Environment.Exit(0); } catch (Exception ex) { PermissionState = CurrentPermissionState.PermissionDenied; throw new XFEExtensionException("无法获取管理员权限", ex); } } static AdministratorPermission() { var isAdmin = IsAdministrator(); PermissionState = isAdmin ? CurrentPermissionState.Administration : CurrentPermissionState.Normal; } } #endif