9

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

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

我正在编写的安装程序是“主”安装程序。它需要能够读取其客户端计算机上安装的每个组件的版本,以便仅在该一个组件上执行升级。

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

我正在使用 Installshield 2009。

我已经查看了链接的 MSI,但主安装程序是空的。因为它需要尽可能轻巧。

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

我已经研究过 - 显然先决条件并不意味着要卸载。


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

这听起来很令人困惑——即使对我来说也是如此。

我已经诉诸功能<组件(包括服务)

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

Perermtate,我认为没有办法卸载预先安装的先决条件,这是有道理的,因为可能需要先决条件作为其他应用程序的平台,毕竟“先决条件”是应用程序的第 3 方组件.

感谢您的所有回复!

4

4 回答 4

4

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

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

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

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

更新:当我写这篇文章时(2009 年 8 月),它还没有准备好,但是 Wix 项目正在开发它自己的引导程序/chaniner,称为Burn,对于我们这些喜欢 Wix 的人来说,它看起来很有希望。

于 2008-11-18T01:27:42.437 回答
1

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

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

于 2009-02-19T17:42:39.313 回答
1

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

于 2010-06-08T01:57:55.807 回答
0

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

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

于 2008-11-18T00:48:28.383 回答