gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:08:10 30 4
gpt4 key购买 nike

我有一个 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-action 的条件为NOT Installed,出于测试目的我将其删除。

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

最佳答案

您需要为 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使属性在卸载期间可用,尽管您可能希望在存储密码之前添加另外几个操作来加密/解密密码。

关于未运行主要升级回滚的 WiX 自定义操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15948121/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com