Windows Installer XML(WiX)的自动更新和升级管理

时间:2012-03-10 15:38:37

标签: wix

我一直在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工具满足所有这些要求,或者我可能需要从头开始编写某些组件?

1 个答案:

答案 0 :(得分:9)

WiX绝对是我认为的方式。

  1.   

    当我启动安装程序时,它应该检查服务器上的文本文件,看看是否有更新的版本。如果是这样的话,   然后安装程序应该能够下载更新的安装程序   打包并启动它(WiX中是否有任何下载程序实用程序?)

    在我看来,这种类型的功能最好由应用程序处理。但是,您可以在自定义引导程序中实现此类功能。 WiX的最新发展包括一个引导程序引擎Burn,它允许您在其上编写自己的自定义引导程序。

  2.   

    解决依赖关系。我的应用程序的主要依赖是.NET 4(它本身依赖于Windows Installer 3)。安装人员应该提供   用户自动下载和安装它们

    您可以使用标准WiX bootstrapper安装.NET作为先决条件。或者,如果您创建自己的自定义托管引导程序,则可以将.NET作为先决条件安装到引导程序as in this example

  3.   

    记录安装过程,同时收集依赖项安装过程的日志文件。我不希望用户   在.NET4或WindowsInstaller3中搜索各种.log文件   安装失败。所有信息都应该收集在一起   如果出现问题,我应该向用户显示一个自定义弹出窗口   对话框,带有保存完整安装日志文件并发送的选项   它对我来说

    使用上面的两种引导方法,当您启动msi时,您可以指定用于记录的参数。在我自己的自定义托管引导程序中,我创建了一个按钮来打开安装期间创建的日志文件。

  4.   

    安装程序应该能够检测是否已安装我的应用程序的更新版本,并显示有意义的自定义错误   退出之前的消息

    您可以使用launch conditions

  5. 执行此操作
  6.   

    安装程序应该能够检测是否已经安装了我的应用程序的旧版本。并提供用户退出安装或   卸载以前的版本并安装新版本。顺便说一句,   计划没有小的组件升级,我更喜欢重新安装   一切都很新鲜(我猜,这是一个重大的升级   WindowsInstaller)。 Installshield LE对我来说失败了,它只是   显示有关另一个产品的消息的错误框,但确实如此   不提供卸载

    根据我的经验,这major upgrades是最不复杂的 方法

  7.   

    如果是升级,安装程序应该能够检测到是否有一些   应用程序组件正在使用中(运行应用程序进程)和   显示自定义错误消息,而不只是一些神秘的“安装   失败“

    我认为WiX / Windows Installer一般都善于处理这些问题 场景并自动通知用户 文件/应用程序需要关闭而无需您创作 安装程序中的任何其他内容。

  8. 所有这些,你可能想要研究使用WiX和Burn创建自己的自定义托管引导程序。然而,这并非微不足道。最好的去处是将源代码下载到WiX Weekly Releases并检查项目src \ Setup \ WixBA。这是他们为安装WiX而编写的自定义BA。目前还没有太多的文档因为WiX 3.6没有发布(尽管它非常稳定)。但是,您不必创建自己的BA来制作可以处理升级和日志记录的可靠的WiX安装程序。