XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension

【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Diagnostics;
using System.Runtime.Versioning;
using System.Security.Principal;
using XFEExtension.NetCore.Exceptions;

namespace XFEExtension.NetCore.PermissionExtension;

#if WINDOWS
/// <summary>
/// UAC权限(管理员权限)
/// </summary>
[SupportedOSPlatform("windows")]
public static class AdministratorPermission
{
    /// <summary>
    /// 当前请求的状态
    /// </summary>
    public static CurrentPermissionState PermissionState { get; private set; }
    /// <summary>
    /// 当前是否以管理员身份运行
    /// </summary>
    /// <returns></returns>
    public static bool IsAdministrator()
    {
        var identity = WindowsIdentity.GetCurrent();
        var principal = new WindowsPrincipal(identity);
        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    /// <summary>
    /// 请求管理员权限并重启程序
    /// </summary>
    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