前言:Vista和Win7下为提高系统安全性,引入UAC。
UAC给程序运行带来很大不便,如普通管理员权限运行的程序不能操作注册表,操控服务,读写文件等。有管理员运行权限的进程运行时会弹框提示等,且有管理员权限的程序若为设置自动启动,电脑重启后将被阻止。
解决:给程序配置管理员权限,绕过UAC控制
一:给程序添加管理员运行权限
1、添加新建项(应用程序清单文件),配置为管理员权限进程(本来是要搞图片的,可不能粘贴)。
2、程序启动时判断当前操作系统,若是Vista及其上,则以超级管理员身份运行,软件开机启动后弹出确认窗口,但不会被阻止。
---------------------------------------------------------------------------------------------------------------------------------------------------
判断当前操作系统:
/// <summary>
/// 判断当前运行程序是在Vista或更高版本运行
/// </summary>
/// <returns></returns>
static internal bool IsVistaOrHigher()
{
return Environment.OSVersion.Version.Major > 5;
}
-------------------------------------------------------------------------------------------------------------------------------------------------
判断是否是以管理员身份登录:
/// <summary>
/// 判断当前是否是管理员登录
/// </summary>
/// <returns>If is elevated</returns>
static internal bool IsAdmin()
{
bool BResult = false;
WindowsIdentity WinID = WindowsIdentity.GetCurrent();
WindowsPrincipal WinP = new WindowsPrincipal(WinID);
if (WinP.IsInRole(WindowsBuiltInRole.Administrator))
{
BResult = true;
}
return BResult;
}
-------------------------------------------------------------------------------------------------------------------------------------------------
以管理员身份运行某些程序:
/// <summary>
///重启程序以超级管理员登录
/// </summary>
internal static void RestartElevated()
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UseShellExecute = true;
startInfo.WorkingDirectory = Environment.CurrentDirectory;
startInfo.FileName = Application.ExecutablePath;
startInfo.Verb = "runas";
try
{
Process.Start(startInfo);
}
catch//取消程序运行
{
}
Application.ExitThread();
Application.Exit();
}
备注:Vista和Win7下以服务启动的EXE不受限即运行时不用弹出提示框,可以操作注册表,服务,读写文件等
-------------------------------------------------------------------------------------------------------------------------------------------------
VS制作的安装包不用特殊配置:
因为安装包运行时UAC会自动判断并弹出提示。