WiX DLL组件拒绝安装

时间:2015-02-11 16:15:09

标签: wix installer

我正在使用Wix来安装应用程序。这里的诀窍是应用程序正在另一个第三方应用程序之上安装。 我正在使用引导程序安装它们。

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

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

组件:DotEditPanels.dll;安装:缺席;要求:本地;行动:空

我尝试过各种各样的事情来实现这一目标。我开始在Component中使用A标签删除原始DLL,然后安装它。

如上所示,该组件将被跳过。

然后我开始使用自定义操作来删除原始DLL,它只能在Component中删除。同样的事情。

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



<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>
&#13;
&#13;
&#13;

我需要的只是让这个新的DLL得到解决,而我似乎无法让安装程序做到这一点。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

文件覆盖规则基于文件版本,因此如果您的文件版本低于已安装文件的版本,那就是明显的解释。此规则是修补程序,修补程序,Service Pack等的基础,因此,如果您的版本控制正在执行它的工作,现有版本应该比您的更新。我们还假设这样的Dll与可能已安装的旧应用程序兼容。

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

答案 1 :(得分:-1)

我想的多了。

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

是的,我知道这可能不是“犹太洁食”,但它正在为我的目的完成工作。