使用提升的权限调用自定义操作,但不使用LocalSystem

时间:2016-10-02 09:55:16

标签: wix windows-installer scheduled-tasks custom-action elevated-privileges

我想从自定义操作创建计划任务。我需要提升权限来创建它。我使用Task Scheduler Managed Wrapper

    using (TaskDefinition taskDefinition = TaskService.Instance.NewTask())
    {
        taskDefinition.RegistrationInfo.Date = DateTime.Now;
        taskDefinition.RegistrationInfo.Description = "...";
        taskDefinition.Principal.RunLevel = TaskRunLevel.Highest; // Scheduled Task with elevated privileges

        DailyTrigger trigger = new DailyTrigger();
        try
        {
            trigger.StartBoundary = new DateTime(DateTime.Today.Ticks)
                .AddHours(20);
            trigger.ExecutionTimeLimit = TimeSpan.FromSeconds(30);
            trigger.DaysInterval = 2;
        }
        catch
        {
            trigger.Dispose();
            throw;
        }

        taskDefinition.Triggers.Add(trigger);
        taskDefinition.Actions.Add(Path.Combine(session.CustomActionData.Keys.Single(), "Updater.exe"));

        TaskService.Instance.RootFolder.RegisterTaskDefinition(TaskName, taskDefinition);
    }

根据How to run custom executable with elevated privileges?,我必须使用

impersonate='no'

这样可行,但是我希望让用户将MSI称为计划任务的用户。但上述解决方案允许MSI将自定义操作称为 LocalSystem 然后使用LocalSystem用户创建计划任务。

计划任务调用从UNC路径读取的exe。所以LocalSystem在那里不能工作。

如何使用具有提升权限的MSI用户调用自定义操作?

1 个答案:

答案 0 :(得分:1)

对于使用安装用户凭据运行的提升自定义操作,您必须提升整个MSI进程启动,并在自定义操作中使用impersomnate = yes。启动通常使用具有提升清单的启动程序并使用CreateProcess启动启动MSI,或者更好地直接调用MsiInstallProduct(或等效)。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa370315(v=vs.85).aspx