【问题标题】:How to execute custom action only in install (not uninstall)如何仅在安装(而不是卸载)中执行自定义操作
【发布时间】:2010-10-06 23:01:26
【问题描述】:

我敢肯定这很容易,但我很难做到这一点。我有一个自定义操作,在安装时执行不同的(非 msi)安装程序。不幸的是,我注意到它还在卸载时执行安装程序!

我已经查看了选项,但我似乎无法找到阻止这种情况的方法。如果有人可以帮助我,我将非常感激。

另外,如何设置自定义操作以仅在卸载期间关闭?非常感谢任何帮助!

【问题讨论】:

标签: installation windows-installer installshield


【解决方案1】:

请注意REMOVE=ALL。它在 installvalidate 序列之前不可用。
并查看以下链接了解更多详情:
http://msdn.microsoft.com/en-us/library/aa371194(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/aa368013(v=vs.85).aspx

【讨论】:

    【解决方案2】:

    一点修正:

    最后,要仅在卸载期间运行操作,请使用以下条件: REMOVE="ALL"

    这似乎更合适,因为属性 REMOVE 包含正在卸载的功能。
    因此,如果我进行修改以删除一项功能,REMOVE 为真,并且仅在卸载时执行的操作在修改时执行。
    More details here on MSDN

    【讨论】:

      【解决方案3】:

      一个例子:

      <InstallExecuteSequence>
      ..
          <Custom Action="QtExecIdOfCA" Before="InstallFinalize">NOT Installed</Custom>
      ..
      </InstallExecuteSequence>
      
      ..
      ..
      <CustomAction Id="QtExecIdOfCA" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="ignore" Impersonate="no"/>
      

      注意! 条件被添加到&lt;Custom&gt; 标记中,而不是 &lt;CustomAction&gt; 它让我感到困惑,因为自定义后面是操作属性

      【讨论】:

        【解决方案4】:

        在操作上添加条件,使其仅在安装期间触发,而不是卸载。

        仅在安装期间运行的操作

        NOT Installed AND NOT PATCH
        

        安装和修复期间运行的操作

        NOT REMOVE
        

        仅在初始安装时运行:

        NOT Installed
        

        在初始安装或选择修复时运行。

        NOT Installed OR MaintenanceMode="Modify"
        

        要仅在卸载期间运行操作,请使用以下条件:

        REMOVE~="ALL"
        

        仅在升级期间运行操作:

        Installed AND NOT REMOVE
        

        【讨论】:

        • @Rasa 重新安装模式是什么意思? MSI 用语中没有这样的东西,您可能正在寻找“修复”(不删除)。如果您记录 MSI 输出,您可以准确查看上述条件中使用的各种值将被设置为什么,并找出与您的情况匹配的值。
        • 修改呢?仅在卸载功能时运行操作?仅在安装功能时运行操作?仅在修复功能时运行操作?
        • 非常感谢,它对我帮助很大。我快疯了.. NOT REMOVE 帮了我
        • 除了我添加到问题中的链接之外,这里是备忘单 PDF 的直接链接。不保证,我自己没有测试过这些条件,但它们来自 Installshield,所以它们应该没问题:Common MSI Conditions
        【解决方案5】:

        自定义操作的条件,可能带有匹配的自定义操作来执行卸载。不确定您使用的是什么工具,但假设二次安装与组件相关联,我将使用该组件状态。状态=3 表示已安装的目标状态。状态 = 2 表示目标状态不存在。请注意,如果没有变化,则不会设置状态。

        【讨论】:

          猜你喜欢
          • 2013-06-29
          • 2019-04-19
          • 2014-10-30
          • 2011-01-12
          • 2012-03-21
          • 2020-04-26
          • 1970-01-01
          • 2012-01-26
          • 2019-02-21
          相关资源
          最近更新 更多