在安装了另一个版本的同时执行安装时,我们需要调用一个自定义操作,该操作使用旧应用程序的exe(在删除之前)。自定义操作负责删除旧的计划任务。怎么会做这样的事情?
答案 0 :(得分:0)
您可以在升级安装程序中实现此功能。
基本思路是你有一个延迟的自定义动作,只有当WIX_UPGRADE_DETECTED属性存在时才会运行。当您使用产品中的<MajorUpgrade>
wix元素进行升级时,会设置此项。然后,您可以在RemoveExistingProducts之前安排自定义操作,并且它将能够删除计划任务。
这种做法有一些注意事项。
第一个警告是,此方法限制了您可以安排RemoveExistingProducts的位置。你必须安排&#34; afterInstallInitialize&#34;或以后。
如果您使用&#34; afterInstallInitialize&#34;然后安排自定义操作Before="RemoveExistingProducts"
就可以了。如果您稍后在安装过程中安排RemoveExistingProducts,则可能需要对自定义操作Before="InstallFiles"
进行简化,以防旧的exe或其可能加载的文件被新安装替换。
这个的基本实现可能看起来像这样
<MajorUpgrade Schedule="afterInstallInitialize" DowngradeErrorMessage="A newer version of [ProductName] is already installed."/>
<CustomAction Id="CA_RemoveScheduledTask" BinaryKey="CustomActionsDLL" DllEntry="RemoveScheduledTask" Execute="deferred" Return="check" />
<InstallExecuteSequence>
<Custom Action="CA_RemoveScheduledTask" Before="RemoveExistingProducts">WIX_UPGRADE_DETECTED</Custom>
</InstallExecuteSequence>
您可能还需要将安装位置传递给自定义操作,该操作可以使用会话的CustomActionData属性进行访问。可以看到如何执行此操作的示例here。这只是为了获得exe位置的正确路径。通常我通过注册表项搜索获得安装路径。
答案 1 :(得分:0)
至少有两种方法可以长期使用,因为想要在另一个已安装的产品中运行自定义是不正常的。
如果在两个安装中都需要此可执行文件,则它是共享资源,并且可执行文件和自定义操作可能对两个安装都是通用的(可能在合并模块中以保持正确共享)。
如果在升级或卸载过程中某个时候调用自定义操作,那么在旧安装中调用自定义操作的条件似乎可能不正确。例如,如果在作为升级的一部分卸载它时应调用它,则调整UPGRADINGPRODUCTCODE上的调用。