Мой установщик в настоящее время устанавливает несколько файлов в каталог и затем выполняет некоторые скрипты 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
Как вы создаете задачу в первую очередь? Вероятно, ошибка заключается в том, что вы пытаетесь удалить задачу из системного контекста, который не содержит эту задачу, поскольку она была создана в контексте пользователя во время установки. Если вы поместите/RU «SYSTEM» в свой SCHTASKS/CREATE, он может решить эту проблему. –
Я только что попробовал это. Задача все еще создается, но она не удаляется. Казалось бы, задачи не создаются с использованием «perMachine» без/RU «SYSTEM». –
Не уверен, какое решение будет тогда, это было всего лишь догадка. Похоже, есть журналы для schtasks в C: \ windows \ tasks \ schedlgu.txt, если они существуют, они могут пролить свет на проблему. Ошибка 1631, я думаю, это просто общая ошибка с ошибкой пользовательского действия. –