2013-04-11 147 views
1

我有一个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="&quot;[SystemFolder]SCHTASKS.EXE&quot; /Create /RU &quot;[TASK_DOMAIN]\[TASK_USERNAME]&quot; /RP [TASK_PASSWORD] /SC DAILY /TN &quot;Maintenance&quot; /TR &quot;[\\]&quot;[SERVICELOCATION]Maintenance.exe[\\]&quot;&quot; /ST [TASK_TIME]" 
       Execute= "deferred"/> 
<!-- rollback in case something went wrong --> 
<CustomAction Id="CreateScheduledTask_Rollback" Execute="rollback" Return="ignore" Directory="SystemFolder" ExeCommand="&quot;[SystemFolder]SCHTASKS.EXE&quot; /Delete /TN &quot;Maintenance&quot; /F" /> 
<!-- removal of task --> 
<CustomAction Id="RemoveScheduledTask" Return="ignore" Directory="SystemFolder" ExeCommand="&quot;[SystemFolder]SCHTASKS.EXE&quot; /Delete /TN &quot;Maintenance&quot; /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 .:我无权访问任务最初创建的域,用户名或密码。

回答

3

您需要另一个回滚自定义操作RemoveScheduledTask,该操作基本上是CreateScheduledTask中的内容。例如:

<CustomAction Id="RemoveScheduledTask_Rollback" Return="ignore" Directory="SystemFolder" 
      ExeCommand="&quot;[SystemFolder]SCHTASKS.EXE&quot; /Create /RU &quot;[TASK_DOMAIN]\[TASK_USERNAME]&quot; /RP [TASK_PASSWORD] /SC DAILY /TN &quot;Maintenance&quot; /TR &quot;[\\]&quot;[SERVICELOCATION]Maintenance.exe[\\]&quot;&quot; /ST [TASK_TIME]" 
      Execute="rollback" /> 

<InstallExecuteSequence> 
    <Custom Action="RemoveScheduledTask_Rollback" Before="RemoveScheduledTask""> 
    REMOVE="ALL" 
    </Custom> 
</InstallExecuteSequence> 

您将需要访问域,用户名和密码才能以与原来相同的方式创建任务。您可以使用Remember Property Pattern在卸载期间提供可用的属性,但您可能希望添加其他几项操作来加密/解密密码,然后才能存储该密码。

+0

这就是我所害怕的。感谢您的示例和澄清。出于安全原因,我不会存储凭据。由于升级失败之后还会进行额外的调查(很可能是升级成功),这只会造成一些不便。 – urbanhusky 2013-04-12 06:29:39

相关问题