【问题标题】:Bootstrapper: Check if msi version is installed before running引导程序:在运行前检查是否安装了 msi 版本
【发布时间】:2009-12-10 23:12:15
【问题描述】:

我正在尝试为以下问题寻找解决方案:

我有许多程序(我们称它们为从属程序),它们都依赖于一个程序(主程序)。我需要为每个从站分发一个安装程序。这个安装程序需要安装master。

我希望能够对这两个部分进行版本控制,因此多个 msi 似乎是正确的解决方案,并与引导程序链接。

我的问题是,如果从属安装程序安装了与已安装的主控相同的版本,.msi 将在修复/删除模式下运行。

从用户的角度来看,这是不可接受的,只会引起混淆。

在尝试运行 msi 之前,有什么方法可以检查当前安装的文件的版本吗?

我目前正在使用 WIX 的 setupbld.exe 作为引导程序。

非常感谢任何其他解决方案(我也尝试过合并模块但没有成功,因为版本控制没用)

【问题讨论】:

    标签: wix windows-installer bootstrapper merge-module


    【解决方案1】:

    您可以使用 msbuild 的 generatebootstrapper task,而不是使用 setupbld.exe(我真的不知道,因为我找不到任何文档)。 wix 文档已经介绍了如何使用此任务来生成安装 .NET 框架的引导程序。见How To: Install the .NET Framework Using a Bootstrapper。这利用了预定义的引导程序包。

    但是,在这种情况下,您还必须编写自己的引导程序包。一种方法是研究C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\(或Windows SDK)中现有的引导程序包并阅读documentation of the Bootstrapper Manifest XML formatbootstrapper generator 工具也可能会有所帮助。

    要确定是否需要安装包,可以使用InstallChecks 之一设置属性,然后在Commands 元素下的InstallCondition 中检查属性值。

    如果你认为这一切都比它应该的更难——我同意,但这是我迄今为止所使用的。有一些我还没有尝试过的替代方案:

    • 名字不好的dotNetInstaller 这实际上是一个通用目的 引导程序生成器。
    • wix 3.5 burn 尚未发布的引导程序。我不确定它是否处于可用状态。

    【讨论】:

    • 我最终使用了 dotNetInstaller,并发现虽然并不完美,但它比使用 Microsoft boostrappers 更好(无法让它们按我的需要工作)。到目前为止,我尝试用 dotNetInstaller 做的每一件事都奏效了。虽然有时需要一点指导。
    猜你喜欢
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多