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

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

Bry*_*anJ 9

在我看来,WiX绝对是我的选择.

  1. 当我启动安装程序时,它应该检查服务器上的文本文件,看看是否有更新的版本.如果是这种情况,那么安装程序应该能够下载更新的安装程序包并启动它(WiX中是否有任何下载程序实用程序?)

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

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

    您可以使用标准的WiX 引导程序来安装.NET作为先决条件.或者,如果您创建自己的自定义托管引导程序应用程序,则可以将.NET作为先决条件安装到引导程序,如本例所示

  3. 记录安装过程,还收集依赖项安装过程的日志文件.我不希望用户在.NET4或WindowsInstaller3安装失败的情况下搜索各种.log文件.所有信息都应该收集在一个地方,如果出现问题,我应该向用户显示一个自定义弹出对话框,其中包含保存完整安装日志文件并将其发送给我的选项

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

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

    您可以使用启动条件执行此操作

  5. 安装程序应该能够检测是否已安装我的应用程序的旧版本.并提供用户退出安装或卸载以前的版本并安装新版本.顺便说一下,没有计划的小部件升级,我更喜欢重新安装一切新的(我想,这是WindowsInstaller的一个重大升级).Installshield LE对我失败了,它只显示了一个错误框,其中包含有关另一个产品的消息,但没有提供卸载它

    根据我的经验,这次重大升级是最简单的方法.

  6. 在升级的情况下,安装程序应该能够检测某些应用程序组件是否正在使用(运行应用程序进程)并显示自定义错误消息,而不仅仅是一些神秘的"安装失败"

    我认为WiX/Windows Installer通常擅长处理这些场景,并自动通知用户文件/应用程序需要关闭,而无需在安装程序中创建额外的任何内容.

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