我正在使用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;
我需要的只是让这个新的DLL得到解决,而我似乎无法让安装程序做到这一点。有什么想法吗?
答案 0 :(得分:1)
文件覆盖规则基于文件版本,因此如果您的文件版本低于已安装文件的版本,那就是明显的解释。此规则是修补程序,修补程序,Service Pack等的基础,因此,如果您的版本控制正在执行它的工作,现有版本应该比您的更新。我们还假设这样的Dll与可能已安装的旧应用程序兼容。
无论如何,你提到了一个程序集,所以如果它是托管代码,那么你可以将AssemblyFileVersion设置为一个将覆盖现有Dll的版本。否则它默认为程序集版本。如果您需要保持程序集版本相同,因为客户端绑定它们仍然可以,然后使用文件版本来表示更高版本并覆盖旧版本。
答案 1 :(得分:-1)
我想的多了。
所以,我实际上是“作弊”。我将DLL添加为二进制对象,然后使用自定义操作删除原始DLL并从安装程序数据库中的Binary对象读取新DLL并将其写入正确的位置。
是的,我知道这可能不是“犹太洁食”,但它正在为我的目的完成工作。