gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:28:32 24 4
gpt4 key购买 nike

我一直在 Visual Studio 2010 中使用 InstallShield LE,但它受到严重限制,有时也有问题。我查看了付费的 InstallShield 版本,但这些版本对于该价格标签也有太多限制。

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

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

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

  • 我已经读到,即使我保持我的 UpgradeCode 完好无损,管理升级也可能有点痛苦,因为此代码以压缩方式存储在 Windows 注册表中,而且如果用户重命名下载的文件,它可能会被检测为WindowsInstaller 的全新产品......或者这可能只是 WindowsInstaller .msi 文件的情况,而 WiX 有一些技巧可以避免这个问题?

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

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

    最佳答案

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

  • when I launch the installer, it should check a text file on the server and see if a newer version is available. If it's the case, then the installer should be able to download the updated installer package and launch it (are there any downloader utilities in WiX?)



    在我看来,这种类型的功能最好由应用程序处理。但是,您可以在自定义 bootstrap 中实现此类功能。 WiX 的最新发展包括一个 bootstrap 引擎 Burn这允许您在其上编写自己的自定义 bootstrap 。
  • solving dependencies. Major dependency of my app is .NET 4 (which itself depends on Windows Installer 3). The installer should offer the user to download and install them automatically



    您可以使用标准 WiX bootstrapper安装 .NET 作为先决条件。或者,如果您创建自己的自定义托管 bootstrap 应用程序,则可以将 .NET 作为 bootstrap 的先决条件 as in this example
  • logging the installation process, also collecting the log file of the dependencies' installation process. I don't want the user to hunt various .log files in case .NET4 or WindowsInstaller3 installation fails. All the information should be collected in one place and if something fails, I should show the user a custom popup dialog with an option to save the complete install log file and send it to me



    使用上述两种引导方法,当您启动 msi 时,您可以指定日志记录参数。在我自己的自定义托管 bootstrap 中,我创建了一个按钮来打开安装期间创建的日志文件。
  • installer should be able to detect if there is a newer version of my app already installed, and show a meaningful customized error message before it exits



    您可以使用 launch conditions 执行此操作
  • installer should be able to detect if there is an older version of my app already installed. and offer the user to exit installation or uninstall the previous version and install the new version. BTW, there are no minor component upgrades planned, I prefer to reinstall everything fresh (I guess, this is a major upgrade in the terms of WindowsInstaller). Installshield LE failed on me for this, it just showed an error box with the message about another product, but did not offer to uninstall it



    根据我的经验,这个 major upgrades是最简单的
    方法。
  • in case of an upgrade, installer should be able to detect if some of application components are in use (running application processes) and show a custom error message and not just some cryptic "Installation failed"



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

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

    关于wix - Windows Installer XML (WiX) 的自动更新和升级管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9647682/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com