链接msi的/ Bootstrapper /先决条件?

时间:2008-11-17 05:42:15

标签: windows-installer installshield bootstrapper prerequisites chained

我有一些组件MSI包需要一起安装才能构成最终应用程序。

问题是:组成包的组件可以更新,组件在http文件服务器上重新启动。我应该采取什么方法?

我写的安装程序是'主'安装程序。其中需要能够读取客户端计算机上安装的每个组件的版本,以便仅对该组件执行升级。

此外,如果首次安装该应用程序,安装程序将下载并安装所有必需的组件。

我正在使用Installshield 2009。

我已查看链式MSI,但主安装程序为空。因为它需要尽可能轻量化。

我不知道如何编写bootstrapper应用程序,我的公司更喜欢使用installshield来编写安装程序。

我已经研究过了 - 显然先决条件并不是要卸载。


我相信我可以通过更改版本号进行微小更新,从而允许下载只下载所需的组件而不下载整个安装程序 - 目前我正在实施您建议的方式(sascha)和我公司将使用InstallShield提供的FLEXnet连接服务。我提到的“组件”(我们的开发人员喜欢使用的术语)在概念上与InstallShield的组件概念类似。但是我修改了要被功能封装的“组件”,以便在构建版本时我可以选择将每个“功能”包装在cab文件中。

这听起来很混乱 - 甚至对我来说。

我使用了功能<组件(包括服务)

我的公司拒绝让我使用除Installshield之外的任何其他安装程序。我的猜测是,为了在不久的将来更新先决条件要求,需要编写新的安装程序,并将应用程序重新发布为主要升级。这对我来说很有意义。

Perermtate,我认为有一种方法可以卸载先前安装的先决条件,因为前提条件可能需要作为其他应用程序的平台,因为所有“先决条件”都是第三方组件申请。

感谢您的所有回复!

4 个答案:

答案 0 :(得分:4)

我看过类似的问题,我很同情,因为我知道没有简单的答案。如果我理解正确,您基本上需要一个setup.exe来检测目标系统上的先决条件的当前版本,如果它们丢失则安装它们,如果它们已经过时则进行升级。

我过去使用过的几个选项是:

  1. Microsoft的Generic Boostrapper。我以前用过这个,而且喜欢它。缺点是如果您必须编写自己的boostrapper清单,如果您的先决条件不是预定义的清单之一。写清单可能有点棘手,而且耗时,尽管有tool有帮助。此外,如果msi无法进行升级(我遇到其他问题),我还无法找到卸载已安装组件的方法。如果你弄清楚,请告诉我!

  2. 编写自己的boostrapper / chainer。我从Microsoft .NET Framework Setup.exe Bootstrapper Sample开始。它附带源代码,因此您可以灵活地部署组件。然而,这里的代码是C ++,用于检查先决条件和发出正确安装命令的逻辑很棘手,很难做到。

  3. 更新:正如我写的那样(2009年8月),它还没有准备好,但是Wix项目正在开发它自己的bootstapper / chaniner,名为Burn,对于我们这些喜欢Wix的人来说看起来很有希望。

答案 1 :(得分:1)

由于“master”安装程序为空并且没有真正安装任何自己的安装程序,因此可以使用安装脚本作为“引导程序”来使用InstallScript项目(而不是基于MSI的项目)。如果使用InstallScript,则甚至不必担心设置环境来运行代码,因为它将由InstallShield自动配置;如果将.NET用于引导程序,则需要.NET或将其作为安装的一部分进行安装。

由于InstallScript项目不使用MSI,因此您不必担心在安装的“安装执行”序列期间运行其他MSI。您可以使用InstallScript“LaunchAppAndWait”函数为需要安装/更新的任何组件调用安装。

答案 2 :(得分:1)

http://dotnetinstaller.codeplex.com将完成这项工作。

答案 3 :(得分:0)

通过“组件”,您指的是Installshield / MSI组件/功能?或者您是否在自己的术语中使用它?据我所知,如果不发布全新的软件包版本,就无法更新组件。

我的建议是使用未压缩的文件(或每个组件一个CAB)部署“web下载器”安装程序,然后您的有效负载将被称为300kb,并且只有用户选择的功能将从网上下载。