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

Windows installer 通过internet更新MSI安装的最佳方式是什么?,windows-installer,auto-update,Windows Installer,Auto Update,通过internet更新MSI安装的最佳方式是什么 ClickOnce不支持MSI 我需要更新自动发生在互联网上,以同样的方式作为Windows更新发生 理想情况下,我希望我的应用程序能够自动检测到有可用的更新,然后下载并安装 答案应仅涉及MSIs安装。我不介意是否需要安装Windows服务来监视更新。您可以使用msiexec实用程序。您可以找到一个例子。Windows Installer不支持自动更新,也不会处理自动更新的交付。我工作的公司销售产品目标。以下是我最近为一位客户所做的工作: 用户

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

ClickOnce不支持MSI

我需要更新自动发生在互联网上,以同样的方式作为Windows更新发生

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


答案应仅涉及MSIs安装。我不介意是否需要安装Windows服务来监视更新。

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

Windows Installer不支持自动更新,也不会处理自动更新的交付。我工作的公司销售产品目标。

以下是我最近为一位客户所做的工作:

用户界面正在以登录用户的身份运行

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

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

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

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


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

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

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

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

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

  • 现在,无论何时构建项目,VisualStudio都会自动使用MSI安装程序/打包器打包文件

  • 最后一步是从命令行中查找
    FTP客户端

  • 设置正确的参数,并将其添加到上一个参数之后的“生成后事件”

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

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


编辑:还有一件事,您还可以添加一个简单的例程,在程序中的服务器上查找更新。类似于检查文件的MD5散列或文件版本等。一旦例程发现新的更新,它应该向用户提示,然后您可以告诉用户下载最新的更新等。

您是否检查了应用程序虚拟化?


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

我需要它通过internet自动更新。几个问题:是否需要提供服务?应用程序不能在启动时检查更新吗?服务可以访问哪个临时文件夹?出于安全考虑以及Windows Installer的工作方式,最好有一个提升的进程,该进程可以创建一个临时目录,非priv用户只能在该目录中读取并从中公布安装。然后,非priv最终用户进程可以启动安装,并且可以正常工作。如果非PrV用户检查启动时的更新,这会在路上造成高程问题。如果应用程序非常轻量级,不需要管理员私有安装,那么您可能需要考虑ClickOnce。但是,如果是每台机器安装,任何非priv用户都需要升级,那么MSI的这种模式就是您需要的。问题是,它是一个使用.NET组件的VB6应用程序,这使得ClickOnce很困难。我也很喜欢MSI的功能,比如self-heal。此外,该服务是否会像本回答中建议的那样导致不必要的提升提示?你能解释一下那是什么吗?我试着读过那个网站,但没有任何意义。你能看看这个吗?对不起,我不是想自动将包发送到服务器。我的意思是,用户将收到产品的自动更新。是的,您必须首先更新服务器上的文件。。。然后阅读编辑部分。你应该创建“更新”检查例程来检查服务器上的更新版本……我很好奇,你有没有实现过这个?