2

Я хочу создать запланированную задачу из пользовательского действия. Мне нужны повышенные привилегии для его создания. Я использую Task Scheduler Managed Wrapper.Вызов пользовательского действия с повышенными привилегиями, но не как LocalSystem

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.

Запланированная задача вызывает exe, который читается с UNC-пути. Поэтому LocalSystem работать там не будет.

Как можно вызвать пользовательское действие с пользователем MSI с повышенными привилегиями?

+0

Можете ли вы подтвердить, что пользовательское действие не настроен как отложенный? –

ответ

0

Для повышения пользовательского действия, выполняемого с учетными данными пользователя, вы должны поднять процесс запуска процесса MSI и использовать impersomnate = yes в своем пользовательском действии. Запуск, как правило, выполняется с помощью программы запуска, которая имеет манифест уровня и запускает MSI с запуском CreateProcess или лучше просто вызывает MsiInstallProduct (или эквивалент) напрямую.

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

 Смежные вопросы

  • Нет связанных вопросов^_^