检索存储在msi中的应用程序的汇编版本

时间:2018-04-13 11:56:12

标签: c# winforms windows-installer

我无法弄清楚我将如何告诉安装程序msi,它将安装的应用程序的AssemblyVersion是什么。

我想每隔几个小时向网络位置发出一个请求,检查setup.msi以检测更改,然后提示用户更新。

我可以连接两个AssemblyVersions,因此当我递增应用程序时,它会增加安装程序吗?这样我可以检查安装程序版本吗?

或者,有没有办法告诉msi它将安装哪个应用程序版本?

或者我应该以不同的方式解决这个问题,比如在网络共享上放置带有修订号的文本文件? (不是首选)

N.B。我使用SetupProject来创建我的安装程序。

2 个答案:

答案 0 :(得分:1)

(我在这里一般性地谈论Windows Installer,因为我对SetupProject不太熟悉。)

如果您的构建系统支持msi,那么您当然可以绑定msi和程序集包含的版本信息,以及将程序集版本限制为可表示为ProductVersion的版本。请注意,如果要使用Windows Installer升级逻辑,则必须对前三个字段进行有意义的更改,因为Windows Installer会忽略第四个字段。

如果您可以破解.msi文件以执行您自己的逻辑(例如使用Windows Installer API或DTF等包装器),您应该能够从msi数据库中存储的元数据中读取程序集版本。特别是,您需要阅读MsiAssemblyName tableFile table中的值。请注意,MsiAssemblyName表包含程序集版本,而File表包含文件版本;只有确保了这些值,才会同步这些值。

答案 1 :(得分:1)

冒着重复Michael U的一些答案的风险,我会指出在Windows Installer环境中没有人这样做。当Visual Studio MSI构建中的任何文件需要部署到客户端时,VS安装项目的唯一解决方案是主要升级,您可以在其中增加安装项目的版本(接受更改),将RemovePreviousVersions设置为true,然后您必须增加需要更新的文件的文件版本。您不需要更改AssemblyVersion来执行此操作,但您需要增加AssemblyFileversion。这应该有所帮助:

https://www.red-gate.com/simple-talk/dotnet/visual-studio/updates-to-setup-projects/

但它缺少有关更新文件版本的部分。

通常,更新机制相当简单。主要升级基于UpgradeCode,因此您的应用程序只需要通过当前的ProductVersion和UpgradeCode进行Web服务调用,然后您需要下载任何高于当前ProductVersion的版本,然后安装它。这是适用于客户端系统上的多个产品的一般概念,如果您知道只有一个产品,则有更简单的解决方案。