Пользовательское действие WiX при значительном откате обновления не запускается
У меня есть настройка WiX, которая имеет
<MajorUpgrade Schedule="afterInstallInitialize"
DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." />
Если во время обновления возникает ошибка, программа установки откатывается и восстанавливает ранее установленную версию. Однако запланированная задача, созданная с помощью настраиваемого действия, теряется и никогда не восстанавливается.
Пользовательские действия, которые я использую для создания / удаления / отката задачи:
<!-- task scheduling -->
<CustomAction Id="CreateScheduledTask" Return="check" Directory="SystemFolder"
ExeCommand=""[SystemFolder]SCHTASKS.EXE" /Create /RU "[TASK_DOMAIN]\[TASK_USERNAME]" /RP [TASK_PASSWORD] /SC DAILY /TN "Maintenance" /TR "[\\]"[SERVICELOCATION]Maintenance.exe[\\]"" /ST [TASK_TIME]"
Execute= "deferred"/>
<!-- rollback in case something went wrong -->
<CustomAction Id="CreateScheduledTask_Rollback" Execute="rollback" Return="ignore" Directory="SystemFolder" ExeCommand=""[SystemFolder]SCHTASKS.EXE" /Delete /TN "Maintenance" /F" />
<!-- removal of task -->
<CustomAction Id="RemoveScheduledTask" Return="ignore" Directory="SystemFolder" ExeCommand=""[SystemFolder]SCHTASKS.EXE" /Delete /TN "Maintenance" /F" Execute= "immediate"/>
которые стоят в очереди как
<InstallExecuteSequence>
<Custom Action="CreateScheduledTask_Rollback" Before="CreateScheduledTask"></Custom>
<Custom Action="CreateScheduledTask" Before="InstallFinalize"></Custom>
<Custom Action="RemoveScheduledTask" Before="RemoveFiles">
<![CDATA[(REMOVE="ALL")]]>
</Custom>
</InstallExecuteSequence>
CreateScheduledTask
-действие имело условие NOT Installed
который я удалил для целей тестирования.
Может кто-нибудь сказать мне, что мне нужно сделать, чтобы заново создать задачу при откате установки обновления? PS: У меня нет доступа к домену, имени пользователя или паролю, с которым изначально была создана задача.
1 ответ
Вам нужно другое пользовательское действие отката для RemoveScheduledTask
это делает в основном то, что в CreateScheduledTask
, Например:
<CustomAction Id="RemoveScheduledTask_Rollback" Return="ignore" Directory="SystemFolder"
ExeCommand=""[SystemFolder]SCHTASKS.EXE" /Create /RU "[TASK_DOMAIN]\[TASK_USERNAME]" /RP [TASK_PASSWORD] /SC DAILY /TN "Maintenance" /TR "[\\]"[SERVICELOCATION]Maintenance.exe[\\]"" /ST [TASK_TIME]"
Execute="rollback" />
<InstallExecuteSequence>
<Custom Action="RemoveScheduledTask_Rollback" Before="RemoveScheduledTask"">
REMOVE="ALL"
</Custom>
</InstallExecuteSequence>
Вам понадобится доступ к домену, имени пользователя и паролю, чтобы создать задачу так же, как это было изначально. Вы можете использовать шаблон "Свойство запомнить", чтобы свойства были доступны при удалении, хотя вы, возможно, захотите добавить еще пару действий для шифрования / дешифрования пароля перед его сохранением, вероятно.