Windows 10 如何实现登录后自动以管理员权限启动GUI应用

从 Windows Vista 开始,Windows 引入了 UAC (User Account Control)机制,如果应用程序是GUI形式的,任何通过命令行,runonce、run 注册表的方式尝试在计算机重启后,以管理员权限自动启动GUI应用都无法实现,微软给出的唯一方法就是在任务计划程序中创建一个任务计划,并勾选使用最高权限运行选项,如下图:


任务计划

在 github 上有个库 TaskScheduler 对任务计划程序 API 做了一个封装,我们可以使用这个 API 的方式来编程的方式创建计划程序,从而达到启动的目的。以下代码演示如何创建计划任务,其中的 task.Principal.RunLevel = TaskRunLevel.Highest 就是用来指定使用最高权限即超级管理员权限来执行,当然这个的前提是登录用户属于 Administrators 组。将这个方法放到应用中,每次运行的时候执行一次即可。

[Conditional("RELEASE")]
private void RegisterTask()
{
    const string TaskName = "App";
    var logonUser = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
    const string taskDescription = "每当用户登录后自动运行App";
    const string deamonFileName = @"C:\Program Files (x86)\App\App.exe";

    using (var taskService = new TaskService())
    {
        var tasks = taskService.RootFolder.GetTasks(new System.Text.RegularExpressions.Regex(TaskName));
        foreach (var t in tasks)
        {
            taskService.RootFolder.DeleteTask(t.Name);
        }

        var task = taskService.NewTask();
        task.RegistrationInfo.Description = taskDescription;
        task.Triggers.Add(new LogonTrigger { UserId = logonUser });
        task.Principal.RunLevel = TaskRunLevel.Highest;
        task.Actions.Add(new ExecAction(deamonFileName, Program.Environment));

        taskService.RootFolder.RegisterTaskDefinition(TaskName, task);
    }
}

你可能感兴趣的:(Windows 10 如何实现登录后自动以管理员权限启动GUI应用)