我一直在Visual Studio 2010中使用InstallShield LE,但它受到严重限制,有时甚至是错误的。我查看了付费的InstallShield版本,但这些价格标签也有太多限制。
所以我决定改用WiX。几年前我有过一些经验。使用SharpDevelop和WiX工具构建一个简单的安装程序非常容易。
现在我正在尝试为WiX收集解决方案和工具。基本上,我需要获得以下功能(我的客户请求):
当我启动安装程序时,它应该检查服务器上的文本文件,看看是否有更新的版本。如果是这种情况,那么安装程序应该能够下载更新的安装程序包并启动它(WiX中是否有任何下载程序实用程序?)
解决依赖关系。我的应用程序的主要依赖是.NET 4(它本身依赖于Windows Installer 3)。安装程序应该让用户自动下载并安装它们
记录安装过程,还收集依赖项安装过程的日志文件。我不希望用户在.NET4或WindowsInstaller3安装失败的情况下搜索各种.log文件。所有信息都应该收集在一个地方,如果出现问题,我应该向用户显示一个自定义弹出对话框,其中包含保存完整安装日志文件并将其发送给我的选项
安装程序应该能够检测是否已经安装了我的应用程序的更新版本,并在退出之前显示有意义的自定义错误消息
安装程序应该能够检测是否已安装我的应用程序的旧版本。并提供用户退出安装或卸载以前的版本并安装新版本。顺便说一下,没有计划的小部件升级,我更喜欢重新安装一切新的(我想,这是WindowsInstaller的一个重大升级)。 Installshield LE对我失败了,它只显示了一个错误框,其中包含有关其他产品的消息,但没有提供卸载它
如果升级,安装程序应该能够检测某些应用程序组件是否正在使用(运行应用程序进程)并显示自定义错误消息,而不仅仅是一些神秘的“安装失败”
我已经读过,即使我保持我的UpgradeCode完好无损,管理升级可能有点痛苦,因为此代码以压缩方式存储在Windows注册表中,如果用户重命名下载的文件,它可能会得到被WindowsInstaller检测为一个全新的产品...或者这只是WindowsInstaller .msi文件的情况,而WiX有一些技巧可以避免这个问题?
关于更新下载 - 我的应用程序本身也需要此功能。我不确定如何有效地实现它,因此我可以在WiX安装程序和我的应用程序中重用相同的更新下载程序代码/实用程序。
是否可以使用现有的WiX工具满足所有这些要求,或者我可能需要从头开始编写某些组件?
答案 0 :(得分:9)
WiX绝对是我认为的方式。
当我启动安装程序时,它应该检查服务器上的文本文件,看看是否有更新的版本。如果是这样的话, 然后安装程序应该能够下载更新的安装程序 打包并启动它(WiX中是否有任何下载程序实用程序?)
在我看来,这种类型的功能最好由应用程序处理。但是,您可以在自定义引导程序中实现此类功能。 WiX的最新发展包括一个引导程序引擎Burn,它允许您在其上编写自己的自定义引导程序。
解决依赖关系。我的应用程序的主要依赖是.NET 4(它本身依赖于Windows Installer 3)。安装人员应该提供 用户自动下载和安装它们
您可以使用标准WiX bootstrapper安装.NET作为先决条件。或者,如果您创建自己的自定义托管引导程序,则可以将.NET作为先决条件安装到引导程序as in this example
记录安装过程,同时收集依赖项安装过程的日志文件。我不希望用户 在.NET4或WindowsInstaller3中搜索各种.log文件 安装失败。所有信息都应该收集在一起 如果出现问题,我应该向用户显示一个自定义弹出窗口 对话框,带有保存完整安装日志文件并发送的选项 它对我来说
使用上面的两种引导方法,当您启动msi时,您可以指定用于记录的参数。在我自己的自定义托管引导程序中,我创建了一个按钮来打开安装期间创建的日志文件。
安装程序应该能够检测是否已安装我的应用程序的更新版本,并显示有意义的自定义错误 退出之前的消息
您可以使用launch conditions
安装程序应该能够检测是否已经安装了我的应用程序的旧版本。并提供用户退出安装或 卸载以前的版本并安装新版本。顺便说一句, 计划没有小的组件升级,我更喜欢重新安装 一切都很新鲜(我猜,这是一个重大的升级 WindowsInstaller)。 Installshield LE对我来说失败了,它只是 显示有关另一个产品的消息的错误框,但确实如此 不提供卸载
根据我的经验,这major upgrades是最不复杂的 方法
如果是升级,安装程序应该能够检测到是否有一些 应用程序组件正在使用中(运行应用程序进程)和 显示自定义错误消息,而不只是一些神秘的“安装 失败“
我认为WiX / Windows Installer一般都善于处理这些问题 场景并自动通知用户 文件/应用程序需要关闭而无需您创作 安装程序中的任何其他内容。
所有这些,你可能想要研究使用WiX和Burn创建自己的自定义托管引导程序。然而,这并非微不足道。最好的去处是将源代码下载到WiX Weekly Releases并检查项目src \ Setup \ WixBA。这是他们为安装WiX而编写的自定义BA。目前还没有太多的文档因为WiX 3.6没有发布(尽管它非常稳定)。但是,您不必创建自己的BA来制作可以处理升级和日志记录的可靠的WiX安装程序。