首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(WiX)的自动更新和升级管理

(WiX)的自动更新和升级管理
EN

Stack Overflow用户
提问于 2012-03-10 15:38:36
回答 1查看 2.7K关注 0票数 8

我一直在VisualStudio2010中使用InstallShield LE,但它非常有限,有时甚至会出错。我看了付费InstallShield版本,但这些版本对价格标签也有太多的限制。

所以我决定转到WiX。几年前我就有过一些经验。使用SharpDevelop和WiX工具构建一个简单的安装程序非常容易。

现在,我正在尝试收集WiX的解决方案和工具。基本上,我需要获得以下功能(由我的客户请求):

  • 当我启动安装程序时,它应该检查服务器上的文本文件,看看是否有新版本可用。如果是这样的话,那么安装程序应该能够下载更新的安装程序包并启动它(WiX中有任何下载工具吗?)
  • 解决依赖关系。我的应用程序的主要依赖性是.NET 4(它本身依赖于Windows 3)。安装程序应向用户提供自动下载和安装它们的功能。
  • 记录安装过程,还收集依赖项的安装过程的日志文件。我不希望用户搜索各种.log文件,以防.NET4或WindowsInstaller3安装失败。所有信息都应该在一个地方收集,如果有什么失败,我应该向用户显示一个自定义弹出式对话框,并选择保存完整的安装日志文件并将其发送给我。
  • 安装程序应该能够检测我的应用程序是否已经安装了更新版本,并在退出之前显示一条有意义的自定义错误消息。
  • 安装程序应该能够检测到是否已经安装了我的应用程序的旧版本。并向用户提供退出安装或卸载上一个版本并安装新版本的功能。顺便说一句,没有小的组件升级计划,我更喜欢重新安装所有新鲜的(我想,这是一个主要的升级在WindowsInstaller方面)。Installshield LE在我身上失败了,它只是显示了一个错误框,上面有关于另一个产品的消息,但是没有提供卸载它的请求。
  • 在升级时,安装程序应该能够检测某些应用程序组件是否正在使用(运行应用程序进程),并显示自定义错误消息,而不仅仅是一些神秘的“安装失败”。

我读到,管理升级可能有点痛苦,即使我保持了我的UpgradeCode,因为这段代码以压缩的方式存储在Windows中,而且如果用户重命名下载的文件,WindowsInstaller可能会检测到它是一个全新的产品.或者,也许只有WindowsInstaller .msi文件是这样的,而WiX有一些技巧来避免这个问题?

关于更新下载-我需要这个功能也在我的应用程序本身。我不知道如何有效地实现它,所以我可以在WiX安装程序和我的应用程序中重用相同的更新下载程序代码/实用程序。

是否可以使用现有的WiX工具满足所有这些需求,或者我可能需要从头开始编写一些组件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-10 19:19:06

在我看来,WiX绝对是走的路。

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

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

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

您可以使用标准的WiX 自举器将.NET安装为prereq。或者,如果您创建了自己的自定义托管引导程序应用程序,则可以在引导程序.NET 如本例所示上安装prereq。

  1. 记录安装过程,还收集依赖项的安装过程的日志文件。我不希望用户搜索各种.log文件,以防.NET4或WindowsInstaller3安装失败。所有信息都应该在一个地方收集,如果有什么失败,我应该向用户显示一个自定义弹出式对话框,并选择保存完整的安装日志文件并将其发送给我。

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

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

您可以使用发射条件来完成这个任务。

  1. 安装程序应该能够检测到是否已经安装了我的应用程序的旧版本。并向用户提供退出安装或卸载上一个版本并安装新版本的功能。顺便说一句,没有小的组件升级计划,我更喜欢重新安装所有新鲜的(我想,这是一个主要的升级在WindowsInstaller方面)。Installshield LE在我身上失败了,它只是显示了一个错误框,上面有关于另一个产品的消息,但是没有提供卸载它的请求。

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

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

我认为WiX/Windows安装程序通常擅长处理这些场景,并自动通知用户文件/应用程序需要关闭,而不必在安装程序中添加任何额外内容。

尽管如此,您可能需要考虑使用WiX和Burn创建您自己的自定义托管引导程序。然而,这并不是微不足道的。最好的方法是将源代码下载到WiX 每周发行并签出项目src\Setup\WixBA。这是他们为安装WiX而编写的自定义BA。目前还没有太多的文档,因为WiX 3.6还没有发布(尽管它相当稳定)。但是,您不必创建自己的BA来制作一个能够处理升级和日志记录的坚实的WiX安装程序。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9647682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档