Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Deployment 如何部署包含版本低于已部署文件的文件的产品升级?_Deployment_Wix_Windows Installer_Versioning_Major Upgrade - Fatal编程技术网

Deployment 如何部署包含版本低于已部署文件的文件的产品升级?

Deployment 如何部署包含版本低于已部署文件的文件的产品升级?,deployment,wix,windows-installer,versioning,major-upgrade,Deployment,Wix,Windows Installer,Versioning,Major Upgrade,我有一个msi组件,它部署了一个文件MyFile.dll。我有一台测试机器,我的产品已经在其中部署了MyFile.dll,它的版本是09.99.99.99 现在我正在编写一个主要的升级,它将部署一个新版本的MyFile.dll,版本为05.23.76.123。在测试机器上执行后,MyFilee.dll将被删除。。。我需要更改或修复以正确部署它 如何强制部署MyFile.dll,而不考虑其注入的版本号 PS:这只发生在我们的测试机器上。我们交付给用户的产品具有版本号与发布历史一致的文件。Windo

我有一个msi组件,它部署了一个文件MyFile.dll。我有一台测试机器,我的产品已经在其中部署了MyFile.dll,它的版本是09.99.99.99

现在我正在编写一个主要的升级,它将部署一个新版本的MyFile.dll,版本为05.23.76.123。在测试机器上执行后,MyFilee.dll将被删除。。。我需要更改或修复以正确部署它

如何强制部署MyFile.dll,而不考虑其注入的版本号


PS:这只发生在我们的测试机器上。我们交付给用户的产品具有版本号与发布历史一致的文件。

Windows Installer中有几种方法可以做到这一点,但它们都有其复杂性。在我看来,我只需要重新生成与旧DLL相同的源代码,但要使用更新的更高版本,并保持简单。

降级文件并不简单,而且存在问题。如前所述,您可以更改组件guid并使其正常工作。但是,这实际上取决于RemoveExistingProducts的排序位置。如果在删除旧产品并安装新产品的位置对其进行排序,那么它可能会工作

没有一种直接的、有文件记录的方法。所有可用的选项都只是黑客

这只是针对您的测试环境吗? 如果是,那么您可以在属性表中使用REINSTALLMODE=“amus”,并实现您想要的功能。 但是,这仅用于测试,不建议向最终用户建议

问候,,
基兰·赫格德这是完全可能的。如上所述,您可以指定属性并将其设置为“amus”或“dmus”,具体取决于您是希望始终覆盖文件还是仅覆盖具有不同版本的文件:

<Wix ...>
  <Product ...>
    <Property Id="REINSTALLMODE" Value="amus" />

请注意,在编译安装程序时会出现以下警告:
警告LGHT1076:ICE40:重新安装模式在属性表中定义。这可能会造成困难。

我刚刚试过。看来我们无法注入更高的文件版本。我刚刚和我的团队开了一次会议,我们得出结论,我们的测试最好有真实的版本号,而不是伪值……我们可以只更改每个相应文件的组件GUID吗?我认为这应该是可以的,因为我们的每次升级都是一次主要的升级。更改具有相同密钥文件的组件的GUID将违反组件规则。根据RemoveExistingProducts的预定位置,可以进行主要升级。一些可能的故障模式是没有安装DLL,因为MSI看到安装了更新的版本,并选择不安装旧的DLL,然后升级删除了旧的DLL。要解决这个问题,需要了解文件成本和升级场景。最简单的解决方案是让MSI满意并用更新的版本#重建DLL。如果它实际上只是一个DLL,那么使用Visual Studio打开二进制DLL文件(以文件形式打开),然后在verrsion资源中更改文件版本。我从来没有说过要使用“虚拟”版本。这涉及到构建/发布/配置管理实践领域,并且在很大程度上取决于您的环境。我知道在我的环境中,我只需要恢复TFS中的变更集并启动一个新的构建,进行重大升级并完成它。如果不更改每个部署的文件名,我们无法更改组件GUID。正如Chris所指出的,“为具有相同密钥文件的组件更改GUID将违反组件规则。”…我同意这违反了windows installer组件规则。但是,当“RemoveExistingProducts”在最末端排序时,即会出现这种违规情况。安装较新的产品以及较旧的产品,然后卸载较旧的产品。如果升级的方式是先卸载旧产品,然后再安装新产品,则不会违反此处的规则。因为,没有两个产品使用不同的组件guid安装到同一位置。