Wix重新注册DLL修复操作



我有一个MSI,其中包括使用以下代码注册的DLL文件:

<Fragment>
  <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
    <Component Id="XYZ.dll" Guid="<GUID>">
      <File Id="XYZ.dll" KeyPath="yes" Source="XYZ.dll" SelfRegCost="1" />
    </Component>
  </ComponentGroup>
</Fragment>

现在安装后,我手动注册文件的不同版本(使用regsvr32)。我重新运行MSI安装并进行修复。在修复操作中,手动DLL不会被MSI DLL覆盖。是否有一个工作,所以当我做修复操作时,我可以得到MSI DLL。

修复的目的是将已安装产品的状态恢复到MSI文件中的规格。那么,"不同版本"到底是什么意思呢?例如,如果您的Dll文件版本为2.0,而您将其替换为1.0版本,则修复将恢复为2.0版本。但是,如果将2.0文件版本替换为3.0文件版本,则修复将不会用较低版本覆盖较高版本。这是因为修复的默认REINSTALLMODE是(IIRC) pocmus,这意味着如果丢失、相同或旧版本,则替换。

所以这可能有帮助,但如果没有,你应该说明你的文件版本,因为替换是基于它们的。

我想你是说COM注册是通过在两个不同的文件上使用自注册来编写的。在您的场景中(使用虚构的数字和名称),安装了MSI,注册了ComClassA_v2.dll的版本2。然后有人用版本1复制ComClassA_v1.dll并注册它。您现在期望产品修复重新注册ComClassAv2.dll。

不会,因为文件是密钥。文件有版本控制。因此,将现有文件的版本与MSI中的版本进行比较。它们是匹配的,因此元件被认为不需要修理。

我会尝试避免这种实现"策略设计模式"的方法。但是,对您的过程进行的最小更改将是在修复之前简单地删除ComClassA_v2.dll。

相关内容

最新更新