如果您使用他们的用户界面或简单地使用WiX风格的用户界面,则WiX解决了这个问题。
如果您想要更丰富的UI体验,您需要编写自定义引导程序。过去我通过编写一个客户引导程序解决了这个问题,该引导程序为用户提供了一个统一的用户界面,并使安装看起来像一个单独的包,实际上安装是按顺序运行的MSI文件的集合。
下面是我所做的一般要点:
- 引导程序是.NET托管代码。优点:更容易编写。缺点:某些系统没有.NET,我必须为我的托管引导程序安装一个小型非托管引导程序,这个引导程序先部署.NET,然后启动托管引导程序。
- 发现MSI文件(app.config工程...我的应用程序更复杂)。
- 的受管MSI API来读取每个MSI文件功能列表
- 内置一个单一的“特征选择”向导创建顶级功能为每个MSI文件,然后填充子功能,从每个读取.NET的WinForms页MSI文件。
- 根据功能选择和其他选项(卸载,修复,升级等)创建MSI命令行。
- 为“套件”安装程序创建了卸载注册表项,并隐藏了MSI特定的卸载密钥,以便添加/删除程序/程序&功能中只有一个条目。
魔鬼的细节,但它的工作,它运作良好!
编辑2010/9/3更多的音符:
这里有一些事情,如果你采取这种方法来考虑:
- 什么是维护模式的经验吗?您可能需要将系统引导程序缓存到系统中,以便在从ARP启动时打开它。
- 如何升级和卸载?你允许升级一些微星而不是其他微星吗?
- 如何检测升级与维护模式?几乎你必须扫描所有的MSI,如果这些MSI(认为“功能”)中的任何一个已过期,那么你将作为升级运行,而不是维护。
- 考虑部分功能增加...您是否支持只安装部分MSI?在这种情况下,可以升级一些并重新安装其他场景。
- 您可能最终会为整体套件介绍套件版本的概念。不要欺骗自己......这只是一个人/市场版本......只有MSI的问题的版本,只有这些版本才能用于确定安装/修复/升级等。
基本上,在编写安装(无论是单个MSI还是组合套件安装)时,请确保为整个软件生命周期布置了所有用例。以短视的方式编写安装程序非常容易,然后在v2发布时发现自己被绘成不愉快的角落。
祝你好运;)
这似乎是一个很好的方式去了解它。有关创建套件注册表项的任何提示? – stimms 2010-09-03 17:19:23
添加/删除程序主要由HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall中的条目构建。看看那里的一些条目,以了解它的结构。您可以通过Google获取有关如何隐藏其他应用的信息......有几种技术。 我已经更新了我的答案,以包含一些其他注意事项,如果采取此方法,您将需要考虑。严重敲门的学校。 – 2010-09-03 19:31:11
您的回复确实非常非常有帮助。感谢您抽出宝贵的时间。 – stimms 2010-09-03 20:51:53