Wix:修复或重新安装时安装组件

时间:2012-02-09 12:42:42

标签: wix repair reinstall

问题:
我有一个用户要求,如果用户计算机上没有先决条件应用程序,则不会安装该文件。但在安装我的产品后,当用户安装该先决条件应用程序时,他将运行我的安装程序并选择修复以安装该丢失的文件及其相关的注册表项。

我的期望:
我知道Repair只会修复那些已经安装的文件。但是没有任何关于这个的解决办法吗?

任何地方和那里有AddLocal ???

3 个答案:

答案 0 :(得分:1)

您可以在组件标记内使用条件。例如:

<Component Id="RepairOrReinstallOnly" Guid="YourGUID" Transitive="yes">
    <Condition>
        INSTALLED AND (NOT UPGRADINGPRODUCTCODE)
    </Condition>
    ...
</Component>

这样组件应该只安装在维修,修改和重新安装上。

但它不会在第一次安装时安装(INSTALLED为false)或者如果你进行了重大升级(UPGRADINGPRODUCTCODE为真)。

答案 1 :(得分:0)

所以你有一个包含2个程序的应用程序。当我们运行安装程序时,它只安装程序1而不安装程序2,因为没有安装必备程序。

现在,当您安装必备程序并希望该程序2未安装时,应该在安装程序再次运行时安装它。

在安装程序中,有3个选项。添加/删除功能,修复和卸载。您可以转到“添加/删除”功能并选择程序2并进行安装。

您需要在安装程序上创建条件,如果未安装pre-req,则无法安装程序2。因此,当您第一次尝试安装并选择程序2或完全安装时,它会告诉您由于pre-req不存在而无法安装。它只会安装程序1.再次运行安装程序时,它将显示“添加/删除”功能选项。

答案 2 :(得分:0)

我认为这不可行,因为当Windows Installer缓存您的.msi时,会删除.cab文件。这意味着除非用户保留原始安装程序,否则最初跳过的源文件将不可用。做出这个假设有点紧张。

我的建议是始终安装文件,或者尝试让应用程序管理可选文件的部署。我发现,每当你尝试在安装程序中执行非标准操作时,管理起来就会变得复杂得多,并且更难以防止细微问题蔓延。