【问题标题】:What is the best way to update an MSI installation over the internet?通过 Internet 更新 MSI 安装的最佳方式是什么?
【发布时间】:2012-02-28 18:40:34
【问题描述】:

通过 Internet 更新 MSI 安装的最佳方式是什么?

ClickOnce 不支持 MSI。

我需要通过 Internet 自动进行更新,就像 Windows 更新一样。

理想情况下,我希望我的应用程序自动检测到有可用更新并下载并安装它。

答案应该只处理 MSI 安装。我不介意是否需要安装 Windows 服务来监控更新。

【问题讨论】:

  • 我很好奇,你有没有实现过这个?

标签: windows-installer auto-update


【解决方案1】:

这是我最近为客户所做的:

UI 以登录用户身份运行。

服务作为系统运行。该服务检查内容并将其下载到临时目录。然后它使用 /JM 命令通告 MSI。安装程序现在可以由非特权用户安装。

该服务向应用程序发送一条 IPC 消息,说明该安装了。应用程序启动安装程序,向它传递一个指示重新启动应用程序的标志。应用程序退出释放锁定的文件。

在安装程序结束时,该标志会导致安装程序重新启动应用程序。

还可以看看 wuw4 库。它有助于创建很多这样的解决方案。

这是一个复杂的模式,但效果很好。我拥有一家可以帮助您制定此解决方案的公司。 :)

【讨论】:

  • 几个问题:有必要有Service吗?该应用程序不能在启动时检查更新吗?服务可以访问哪个临时文件夹?
  • 出于安全考虑和 Windows Installer 的工作方式,最好有一个提升的进程,该进程可以创建一个临时目录,非 priv 用户只有读取权限并从那里宣传安装。然后,非 priv 最终用户进程可以启动安装并且它会工作。如果非 priv 用户在启动时检查更新,这会导致后续提升问题。
  • 如果应用程序非常轻量级并且不需要管理员权限来安装,那么您可能需要考虑 ClickOnce。但是,如果它是任何非 priv 用户都需要升级的 Per-Machine 安装,那么您将需要这种带有 MSI 的模式。
  • 问题在于它是一个使用 .NET 组件的 VB6 应用程序,因此 ClickOnce 很困难。我也喜欢 MSI 的功能,例如自我修复。
  • 另外,该服务是否会如本答案中所建议的那样导致不需要的提升提示? stackoverflow.com/a/7396926/327528
【解决方案2】:

您可以使用 msiexec 实用程序。 Here你可以找到一个例子。

【讨论】:

  • 我需要通过 Internet 自动提供更新。
【解决方案3】:

Windows Installer 不支持自动更新,也不会处理它们的交付。我工作的公司销售针对updates and more的产品。

【讨论】:

    【解决方案4】:

    这是我通常会做的事情(它只是我如何更新程序的一个概念):

    • 使用Advanced Installer 或任何其他MSI installer/packer 支持Command Line 来打包您更新程序的文件。在进行下一步之前,您需要正确设置参数并进行测试。

    • 转到Visual Studio -> 选择您的项目,然后 -> 属性 -> 构建事件。

    • 在“Post-Build event command line”文本框中输入您之前创建的命令行参数,然后点击确定。

    • 现在,每当您构建项目时,Visual Studio 都会使用 MSI 安装程序/打包程序自动打包您的文件。

    • 最后一步是在命令行中寻找FTP Client 的作品。

    • 设置正确的参数,添加到“Post-Build event”后面的那个。

    • 现在,如果您再次使用 Visual Studio 构建项目。您的文件将被自动打包然后上传到您的服务器。

    现在您的文件应该在服务器上完全更新,您不必再担心了。这是我找到的最好的解决方案,我正在使用它,它就像一个魅力......

    编辑:还有一件事,您还可以添加一个简单的例程来查找程序内部服务器上的更新。例如检查文件的 MD5 哈希值或文件版本等。一旦例程找到新的更新,它应该向用户提示,然后您可以告诉用户下载最新的更新等...

    【讨论】:

    • 对不起,我不是要自动将包发送到服务器。我的意思是用户将收到产品的自动更新。
    • 是的,您必须先更新服务器上的文件...然后阅读编辑部分。您应该创建“更新”检查例程以检查服务器上的较新版本....
    【解决方案5】:

    您是否检查了应用程序虚拟化? http://www.microsoft.com/en-us/windows/enterprise/products-and-technologies/virtualization/default.aspx

    这是一种将可执行​​文件/msi 流式传输到客户端的好方法,同时确保它始终运行最新的 msi。

    【讨论】:

    猜你喜欢
    • 2014-02-05
    • 2012-11-27
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    相关资源
    最近更新 更多