Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
主升级回滚上的WiX自定义操作未运行_Wix_Custom Action_Rollback_Major Upgrade - Fatal编程技术网

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

主升级回滚上的WiX自定义操作未运行,wix,custom-action,rollback,major-upgrade,Wix,Custom Action,Rollback,Major Upgrade,我有一个WiX设置,它有 <MajorUpgrade Schedule="afterInstallInitialize" DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." /> 如果升级过程中出现错误,安装程序将回滚并恢复以前安装的版本。 但是,通过自定义操作创建的计划任务将丢失,并且永远不会恢复 我用于创建/删除/回滚任务

我有一个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
-操作有一个条件
未安装
,我为了测试目的删除了该条件

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

您需要另一个回滚自定义操作来执行

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>


您需要为
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>


这就是我害怕的。谢谢你的例子和澄清。出于安全原因,我不打算存储凭据。由于升级失败之后还会进行额外的调查(而且很可能是成功升级),所以这只会带来一点小的不便。这就是我担心的。谢谢你的例子和澄清。出于安全原因,我不打算存储凭据。由于升级失败后还将进行额外的调查(很可能是成功升级),因此只会带来一些小的不便。