WiX 对主要升级回滚的自定义操作未运行

urb*_*sky 2 custom-action wix rollback major-upgrade

我有一个 WiX 设置,其中有

<MajorUpgrade Schedule="afterInstallInitialize" 
  DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." />
Run Code Online (Sandbox Code Playgroud)

如果升级过程中发生错误,安装程序将回滚并恢复以前安装的版本。但是,通过自定义操作创建的计划任务会丢失并且永远不会恢复。

我用于创建/删除/回滚任务的自定义操作是:

<!-- 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"/>
Run Code Online (Sandbox Code Playgroud)

其排队为

<InstallExecuteSequence>
  <Custom Action="CreateScheduledTask_Rollback" Before="CreateScheduledTask"></Custom>
  <Custom Action="CreateScheduledTask"  Before="InstallFinalize"></Custom>
  <Custom Action="RemoveScheduledTask"  Before="RemoveFiles">
    <![CDATA[(REMOVE="ALL")]]>
  </Custom>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

-actionCreateScheduledTask有一个条件,出于NOT Installed测试目的,我删除了该条件。

谁能告诉我,我需要做什么,才能在升级设置回滚时重新创建任务?PS:我无权访问最初创建任务时使用的域、用户名或密码。

Rob*_*ing 5

您需要另一个回滚自定义操作,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>
Run Code Online (Sandbox Code Playgroud)

您将需要访问域、用户名和密码才能像原来一样创建任务。您可以使用“记住属性模式”在卸载期间使用可用的属性,尽管您可能需要在存储密码之前添加另外几个操作来加密/解密密码。