WIX自定义操作 - 在不同时间运行以进行安装,升级和卸载

时间:2010-08-23 12:50:42

标签: installer wix custom-action

我有一个自定义操作,可以在卸载过程中删除各种目录。我想在安装顺序的不同点调用此操作,具体取决于正在执行的操作:

  • 在安装过程中,请勿运行自定义操作
  • 在升级期间,请在RemoveExistingProducts
  • 之后运行自定义操作
  • 在卸载期间,在RemoveFolders
  • 之后运行自定义操作

我可能会让每一个单独工作,但我如何让他们一起工作我想要的。我试过这样的事情(一些代码来自here):

<InstallExecuteSequence>

  <Custom Action="PreventDowngrading" After="FindRelatedProducts">
    NEWERPRODUCTFOUND AND NOT Installed
  </Custom>

  <LaunchConditions After="AppSearch" />
  <RemoveExistingProducts Before="InstallInitialize" />

  <!-- NEW _> Clean old files AFTER uninstall during an upgrade -->
  <Custom Action="CleanUp"  After="RemoveExistingProducts" >
    UPGRADINGPRODUCTCODE
  </Custom>

  <!-- NEW _> Clean old files LAST during an uninstall -->
  <Custom Action="CleanUp"  After="RemoveFolders" >
    (NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")
  </Custom>

</InstallExecuteSequence>

但是在进行构建时会出现重复的符号错误。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

您还可以使用RemoveFiles来删除目录中的无关文件。

答案 1 :(得分:0)

自定义操作只能在序列中进行一次。我有一些更大的担忧:你在做什么类型的升级?主要升级是卸载以前的产品,因此您的CA可能会以您描述它的方式运行两次。

我会在这里轻轻地走。你可以使用WiX RemoveFolder元素(MSI RemoveFile表)。这将更容易和可靠地实施。如果你必须使用自定义操作,我会使用组件操作状态来确定它应该运行的时间,而不是如上所示的更通用的属性。

相关问题