WiX DLL 组件拒绝安装

WiX DLL component refuses to install

我正在使用 Wix 安装应用程序。这里的技巧是应用程序安装在另一个第三方应用程序之上。 我正在使用引导程序安装两者。

我在上面安装的应用程序有一个我们在我们的应用程序中自定义的 DLL,所以我需要用我们的覆盖原始 DLL。

发生的情况是我们的应用程序安装程序似乎拒绝安装 DLL。日志在 InstallValidate 步骤中显示:

组件:DotEditPanels.dll;已安装:不存在;请求:本地;行动:空

为了实现这一点,我尝试了各种方法。我开始在组件中使用 A 标记删除原始 DLL,然后使用 a 来安装它。

组件被跳过,如上所示。

然后我开始使用自定义操作删除原始 DLL,它工作正常,只是在组件中。一样的。

尝试更多的东西,组件目前看起来像这样:

<Component Id="DotEditPanels.dll" Guid="*" NeverOverwrite="no" SharedDllRefCount="yes">
  <File Id="filF8E7A8CEDC214A73A82277F1BA3B677F" KeyPath="yes" Source="..\..\DotEditPanels-8.1-FP2\bin$(var.Configuration)\DotEditPanels.dll" />
</Component>

我只需要安装这个新的 DLL,但我似乎无法让安装程序完成它。有什么想法吗?

文件覆盖规则是基于文件版本的,所以如果你的文件版本低于安装文件的版本,这是显而易见的解释。这个规则是补丁、修补程序、服务包等的基础,所以如果你的版本控制正在做,那么现有版本应该比你的更新。还假设这样的 Dll 与可能已经安装的旧应用程序兼容。

无论如何,你提到了一个程序集,所以如果它是托管代码,那么你可以将 AssemblyFileVersion 设置为一个将覆盖现有 Dll 的版本。否则它默认为程序集版本。如果您需要保持程序集版本相同,因为客户端绑定到它,它们仍然可以,然后使用文件版本来表示更高版本并覆盖旧版本。

我也这么认为。

所以,我实际上"cheated"。我将 DLL 添加为二进制对象,然后使用自定义操作删除原始 DLL 并从安装程序数据库中的二进制对象读取新的 DLL 并将其写入适当的位置。

是的,我知道这可能不是 "kosher",但它正在为我的目的完成工作。