WiX的自定义操作不运行
问题描述:
我有一个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
条件被排队哪个为了测试目的我删除了。
任何人都可以告诉我,我需要做什么,以便在升级设置回滚时重新创建任务? P.S .:我无权访问任务最初创建的域,用户名或密码。
答
您需要另一个回滚自定义操作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>
您将需要访问域,用户名和密码才能以与原来相同的方式创建任务。您可以使用Remember Property Pattern在卸载期间提供可用的属性,但您可能希望添加其他几项操作来加密/解密密码,然后才能存储该密码。
这就是我所害怕的。感谢您的示例和澄清。出于安全原因,我不会存储凭据。由于升级失败之后还会进行额外的调查(很可能是升级成功),这只会造成一些不便。 – urbanhusky 2013-04-12 06:29:39