WiX升级问题 – 文件的主要版本增加了,但版本较低,现在删除了旧文件,但升级过程中未复制新文件

我根据目录(它是一个Web应用程序)自动为我的安装程序生成一个WiX文件,它包含对以下3个.Net程序集的引用:

> Migrator.dll
> Migrator.Framework.dll
> Migrator.Providers.dll

这是生成的WiX片段:

<Fragment>
<DirectoryRef Id="bin">
  <Component Id="bin.Migrator.dll" Guid="*">
    <File Id="bin.Migrator.dll" Name="Migrator.dll" KeyPath="yes" Source="..\WebApplication\bin\Migrator.dll" />
  </Component>
</DirectoryRef>
</Fragment>
<Fragment>
<DirectoryRef Id="bin">
  <Component Id="bin.Migrator.Framework.dll" Guid="*">
    <File Id="bin.Migrator.Framework.dll" Name="Migrator.Framework.dll" KeyPath="yes" Source="..\WebApplication\bin\Migrator.Framework.dll" />
  </Component>
</DirectoryRef>
</Fragment>
<Fragment>
<DirectoryRef Id="bin">
  <Component Id="bin.Migrator.Providers.dll" Guid="*">
    <File Id="bin.Migrator.Providers.dll" Name="Migrator.Providers.dll" KeyPath="yes" Source="..\WebApplication\bin\Migrator.Providers.dll" />
  </Component>
</DirectoryRef>
</Fragment>

我们一直使用相同的基本安装程序结构一年左右,但最近我们将Migrator.Net库更新为新的内部构建,看到版本号和程序集标题/描述属性发生变化(从Orca中转出)

> bin.Migrator.dll bin.Migrator.dll Migrator.dll 16384 3.0.1317.0 0 512 78
> bin.Migrator.Framework.dll bin.Migrator.Framework.dll pi0mozkr.dll | Migrator.Framework.dll 20992 3.0.1317.0 0 512 79
> bin.Migrator.Providers.dll bin.Migrator.Providers.dll jq05waoy.dll | Migrator.Providers.dll 73216 3.0.1317.0 0 512 82

在升级库之后:

> bin.Migrator.dll bin.Migrator.dll Migrator.dll 16384 3.2.0.1 0 512 55
> bin.Migrator.Framework.dll bin.Migrator.Framework.dll pi0mozkr.dll | Migrator.Framework.dll 28160 3.2.0.1 0 512 56
> bin.Migrator.Providers.dll bin.Migrator.Providers.dll jq05waoy.dll | Migrator.Providers.dll 79872 3.2.0.1 0 512 57

虽然次要版本较高,但修订版现在为1而不是1317.

从那时起,我们发现升级到新版本导致这3个文件没有被复制(因此升级过程会删除旧文件,但不会安装新文件).

这是否与更改程序集的版本号相关,如果有,则有任何方法可以覆盖此行为(我们只想删除所有内容,然后将所有内容复制到新版本,无论版本如何).

有趣的是,如果你安装,然后重新运行安装程序并进行“修复”,它会复制新文件 – 我认为这是因为修复文件时不再存在,所以文件版本检查逻辑不适用?

任何关于它如何工作以及如何避免我们所遇到的升级问题的提示都将不胜感激.

正如 the linked question建议的那样,您可以尝试重新安排 RemoveExistingProducts,以便在安装任何新文件之前删除旧产品,如下所示:
<InstallExecuteSequence>
    <RemoveExistingProducts After="InstallValidate" />
    <!-- other actions -->
</InstallExecuteSequence>

另一种选择是修改REINSTALLMODE属性,并用a替换e模式,这意味着它的值将是amus.这样,所有文件都将重新安装,操作需要更长时间,但更可靠.

相关文章

文章浏览阅读2.2k次,点赞6次,收藏20次。在我们平时办公工作...
文章浏览阅读1k次。解决 Windows make command not found 和...
文章浏览阅读3.2k次,点赞2次,收藏6次。2、鼠标依次点击“计...
文章浏览阅读1.3w次。蓝光版属于高清版的一种。BD英文全名是...
文章浏览阅读974次,点赞7次,收藏8次。提供了更强大的功能,...
文章浏览阅读1.4w次,点赞5次,收藏22次。如果使用iterator的...