public class WindowsIdentityHelper
{
private static ILog _logger = LogManager.GetLogger("WindowsIdentityHelper");
/// <summary>
/// 是否赋予管理员权限
/// </summary>
/// <returns></returns>
public bool IsAdministrator()
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
/// <summary>
/// /// <summary>
/// 以管理员权限运行程序
/// </summary>
/// </summary>
/// <param name="localurl">可执行程序路径</param>
public void RunAsAdministrator(string localurl,bool isRunAs = true)
{
try
{
//创建启动对象
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.FileName = localurl;
if (isRunAs)
{
startInfo.Verb = "runas"; //设置启动动作,确保以管理员身份运行
}
startInfo.WorkingDirectory = new FileInfo(localurl).DirectoryName;
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
startInfo.Arguments = "1";
System.Diagnostics.Process.Start(startInfo);
}
catch(Exception ex)
{
_logger.Error("以管理员权限运行程序:" + ex.Message);
}
}
/// <summary>
/// 自动以管理员权限运行
/// </summary>
/// <param name="isRunAs"></param>
public void RunSelfAsAdministrator(bool isRunAs = true)
{
//创建启动对象
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 (Exception ex)
{
_logger.Error("自动以管理员权限运行:" + ex.Message);
}
}
}