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