2016-08-31 2 views
0

Мой установщик в настоящее время устанавливает несколько файлов в каталог и затем выполняет некоторые скрипты CustomAction для создания 2 запланированных задач с именем Script1 и Script2.WiX CustomAction с повышенными привилегиями SCHTASKS «Доступ запрещен»

У меня есть еще 2 сценария CustomAction, называемые RemoveScript1 и RemoveScript2.

Они все тот же тип 34 СА со следующими атрибутами:

<CustomAction Id="XXXXXX" 
       Directory="AFolder" 
       ExeCommand="XXXXXX" 
       Execute="deferred" 
       Impersonate="no" 
       Return="asyncWait" /> 

И следующая последовательность установки.

<InstallExecuteSequence> 
    <Custom Action="RemoveScript1" Before="InstallFinalize" >REMOVE="ALL"</Custom> 
    <Custom Action="RemoveScript2" Before="InstallFinalize" >REMOVE="ALL"</Custom> 
    <Custom Action="Script1" Before="InstallFinalize" >(NOT Installed) OR MaintenanceMode="Modify"</Custom> 
    <Custom Action="Script2" Before="InstallFinalize" >(NOT Installed) OR MaintenanceMode="Modify"</Custom> 
</InstallExecuteSequence> 

Пример Создание сценария:

SCHTASKS.exe /Create /TN NAME /TR "pathtosomeexe" /SC ONEVENT /EC System /MO *[System/EventID=XXXX] /F 

Пример Удалить скрипт:

SCHTASKS /Delete /TN NAME /F 

создавать сценарии выполнения хорошо, однако, Удалять скрипты не похоже на работу. При проверке журналов я вижу следующие строки, связанные с RemoveScriptX.

  • MSI (ы) (60: В0) [17: 20: 49: 555]: Выполнение действия: RemoveScript1
  • Действие начинают 17:20:49: RemoveScript1.
  • Действие завершено 17:20:49: RemoveScript1. Возвращаемое значение 1.
  • MSI (s) (60: B0) [17: 20: 49: 649]: Выполнение op: ActionStart (Name = RemoveScript1 ,,)
  • MSI (s) (60: B0) [ 17: 20: 49: 649]: Выполнение op: CustomActionSchedule (Action = RemoveScript1, ActionType = 3234, Source = AFolder, Target = C: \ Windows \ SysWOW64 \ SCHTASKS.exe/Delete/TN NAME/F,)
  • 1: RemoveScript1 2: 1631

Когда я пытаюсь удалить эти сценарии, созданные установщиком, используя обычную командную строку, я получаю сообщение «ERROR: Access is denied». , Это здорово! Это означает, что запланированные задачи были созданы администратором. Я могу удалить задачу с помощью командной строки администратора, как и ожидалось.

Если я создаю задачу, используя обычную командную строку, я могу ее удалить как обычно.

Следует отметить, что я пробовал использовать как InstallScope = perMachine, так и perUser. Единственная разница в том, что я должен запустить фактический установщик в качестве Admin для perUser для доступа к директории ProgramFiles для установки других файлов.

Почему мои сценарии удаления не используют admin/повышенные привилегии? Я пропустил что-то глупое? Я предположил, что «1631» был кодом ошибки, возвращенным из файла SCHTASKS.exe, пожалуйста, исправьте меня, если я ошибаюсь.

ОС: Windows 10

WixVersion: 3,10

+0

Как вы создаете задачу в первую очередь? Вероятно, ошибка заключается в том, что вы пытаетесь удалить задачу из системного контекста, который не содержит эту задачу, поскольку она была создана в контексте пользователя во время установки. Если вы поместите/RU «SYSTEM» в свой SCHTASKS/CREATE, он может решить эту проблему. –

+0

Я только что попробовал это. Задача все еще создается, но она не удаляется. Казалось бы, задачи не создаются с использованием «perMachine» без/RU «SYSTEM». –

+0

Не уверен, какое решение будет тогда, это было всего лишь догадка. Похоже, есть журналы для schtasks в C: \ windows \ tasks \ schedlgu.txt, если они существуют, они могут пролить свет на проблему. Ошибка 1631, я думаю, это просто общая ошибка с ошибкой пользовательского действия. –

ответ

0

Это не может быть идеальным ответом, но это, как я решил проблему.

Вместо вызова SchTasks с аргументами вроде так:

[SystemFolder]SCHTASKS.exe /Create /TN TASKNAME 

вместо этого я назвал Powershell давая SchTasks и свои аргументы следующим образом:

[POWERSHELLEXE] &amp; SCHTASKS /Create /TN TASKNAME 

Я не могу отправить точный код, я использовал для версии powershell, когда я перешел к использованию WiX QtExec http://wixtoolset.org/documentation/manual/v3/customactions/qtexec.html.

Это требует, чтобы сценарий был добавлен в атрибут «Значение» вместо «ExeCommand», используемый в исходном вопросе, и форматирование немного отличается для каждого.

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