链接的 msi/Bootstrapper/先决条件?
我有一些组件 MSI 包需要安装在一起才能形成最终应用程序。
问题是:组成包的组件可以更新,并且组件可以在http 文件服务器上重新启动。 我应该采取什么方法?
我正在编写的安装程序是“主”安装程序。 它需要能够读取其客户端计算机上安装的每个组件的版本,以便仅对该一个组件执行升级。
此外,如果首次安装应用程序,安装程序将下载并安装所有必需的组件。
我正在使用Installshield 2009。
我已经研究了链接的MSI,但主安装程序是空的。 因为它需要尽可能轻。
我不知道如何编写引导程序应用程序,而我的公司更喜欢我使用 installshield 来编写安装程序。
我已经研究过 - 显然先决条件并不意味着被卸载。
我相信我可以通过更改版本号来进行小更新,从而允许下载仅下载所需的组件,而不是下载整个安装程序 - 目前我正在实施您建议的方式(sascha),我的公司将使用通过 InstallShield 提供的 FLEXnet 连接服务。 我提到的“组件”(我们的开发人员喜欢使用的术语)在概念上与 InstallShield 的组件概念相似。 不过,我已经修改了“组件”以由功能封装,这样在构建版本时我可以选择将每个“功能”包装在 cab 文件中。
这听起来很令人困惑——即使对我来说也是如此。
我已经求助于功能< 组件(包括服务)
我的公司拒绝让我使用除 Installshield 之外的任何其他安装程序。 我的猜测是,为了在遥远的将来更新先决条件要求,需要编写新的安装程序并重新发布应用程序作为主要升级。 这对我来说很有意义。
Perermtate,我认为没有办法卸载之前安装的先决条件,这是有道理的,因为先决条件可能需要作为其他应用程序的平台,毕竟“先决条件”本来就是应用程序的第三方组件。
感谢您的所有回复!
I have a few component MSI packages that need to installed together to form the end application.
The problem is: the components that make up the package can be updated and the component relaunched on the http file server. What approach should I take?
The installer that I am writing is the 'master' installer. Which needs to be able to read what version of each component is installed on their client machine in order to perform an upgrade only on that one component.
Also if the application is installed for the first time the installer will download and install all required components.
I am using Installshield 2009.
I have looked into chained MSI's but the master installer is empty. as it needs to be as lightweight as possible.
I have no idea how to write a bootstrapper application and my company prefers that I use installshield to write the installer.
I have researched - and apparently pre-requisites are not meant to be uninstalled.
I believe that I can do a minor update by changing the version numbers and thus allowing the download to only download the component it requires and not download the entire installer - currently I am implementing the way that you have suggested (sascha) and my company will be using the FLEXnet connect service offered through InstallShield. The 'components' that I mentioned (a term our developers love to use) is similar in concept to InstallShield's concept of components. However I have modified the 'components' to be encapsulated by a feature so that way when the release is built I can select that each 'feature' is wrapped in a cab file.
This sounds so confusing - even to me.
I have resorted to features < components (including services)
My company refuses to let me use any other installer program with the exception of Installshield. My guess is that in order to update the prerequisite requirements in the distant future a new installer needs to be written and the application re-released as a major upgrade. which makes sense to me.
Perermtate, I don't think there is a way to uninstall a prerequisite that was prior installed which makes sense as the prerequisite may be required as a platform for other applications, after all 'prerequisites' were meant to be 3rd party components to the application.
Thank you for all your responses!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我也研究过类似的问题,我对此表示同情,因为据我所知,没有简单的答案。 如果我理解正确的话,您基本上需要一个 setup.exe 来检测目标系统上先决条件的当前版本,如果它们丢失则安装它们,如果它们过期则升级它们。
我过去使用过的几个选项是:
Microsoft 的 通用Boostrapper。 我以前用过这个,而且很喜欢它。 缺点是,如果您的先决条件不是预定义的之一,则您必须编写自己的 boostrapper 清单。 编写清单可能有点棘手且耗时,尽管有一个工具可以帮助您。 另外,如果 msi 无法升级(我遇到过其他情况),我还无法找到卸载已安装组件的方法。 如果您弄清楚了,请告诉我!
编写你自己的boostrapper/chainer。 我从 Microsoft . NET Framework Setup.exe 引导程序示例。 它附带源代码,因此您可以非常灵活地部署组件。 然而,这里的代码是 C++,检查先决条件和发出正确的安装命令的逻辑很棘手,很难正确执行。
更新:当我写这篇文章时(2009 年 8 月),它还没有准备好,但 Wix 项目正在开发它自己的 bootstapper/chaniner,名为 Burn 对于我们这些热爱 Wix 的人来说看起来非常有前途。
I've looked at similar problems, and I sympathize because there are no easy answers that I know of. If I understand correctly, you basically want a setup.exe that will detect the current versions of the pre-requisites on the target system, install them if they're missing, and upgrade them if they're out of date.
A couple of options that I`ve used in the past are:
Microsoft's Generic Boostrapper. I've used this before, and rather like it. The downsides are that if you'll have to write your own boostrapper manifest if you're prerequisite isn't one of the predefined ones. Writing manifests can be a little tricky, and time-consuming, though there is a tool that helps. Also, I haven't been able to find a way to uninstall an installed component if the msi can`t do an upgrade (something else I've run into). If you figure it out let me know!
Write your own boostrapper/chainer. I started with the Microsoft .NET Framework Setup.exe Bootstrapper Sample. It comes with source code so you have a lot of flexibility in how your components get deployed. Here however, the code is C++ and the logic for checking pre-requisites and issuing the proper install commands is tricky and hard to get right.
Update: as a I write this (August 2009) it's not ready yet but the Wix project is working on it's own bootstapper/chaniner called Burn which for those of us that love Wix looks very promising.
由于“主”安装程序是空的并且没有真正安装自己的任何内容,因此您可以使用 InstallScript 项目(而不是基于 MSI 的项目),并将安装脚本用作“引导程序”。 如果你使用InstallScript,你甚至不需要担心设置运行代码的环境,因为它会由InstallShield自动配置; 如果您使用 .NET 作为引导程序,则需要需要 .NET 或将其作为安装的一部分进行安装。
由于 InstallScript 项目不使用 MSI,因此您不必担心在安装的安装执行序列期间运行其他 MSI。 您可以使用InstallScript“LaunchAppAndWait”函数来调用需要安装/更新的组件的安装。
Since you "master" installer is empty and doesn't really install anything of its own, you could use an InstallScript project (instead of an MSI-based project), using the installation script as the "bootstrapper". If you use InstallScript, you don't even need to worry about setting up the environment to run your code, since it will be configured automatically by InstallShield; If you use .NET for the bootstrapper, you will need to either require .NET or install it as part of your installation.
Since InstallScript projects don't use MSIs, you don't have to worry about running other MSIs during your installation's Install Execute sequence. You can use the InstallScript "LaunchAppAndWait" function to call the installations for whichever components need to be installed/updated.
http://dotnetinstaller.codeplex.com 将完成这项工作。
http://dotnetinstaller.codeplex.com will do the job.
您所说的“组件”是指Installshield/MSI 组件/功能吗? 或者您在自己的术语中使用这个? 据我所知,如果不发布全新的软件包版本,就无法更新组件。
我的建议是部署一个“网络下载器”安装程序,其中包含未压缩文件(或每个组件一个 CAB),那么您的有效负载将为 300kb,并且只会下载用户选择的功能来自网络。
By "components" do you refer to Installshield/MSI Components/Features? Or are you using this in your own terminology? You can't update a component without releasing an entirely new package version as far as I'm aware.
My suggestion would be to deploy a "web downloader" installer with uncompressed files (or one CAB per component) then your payload is going to be say 300kb, and only the features that the user selects will be downloaded from the net.