考虑以下情况:
Project AExe安装在%ProgramFiles%\AExe\bin
和BExe %ProgramFiles%\BExe\bin
中,但两者都使用相同的.MSI进行部署
如何将CommonLib.dll声明为通用组件,然后在AExe Directory[Ref]
和BExe Directory[Ref]
中重复使用?
我想做什么:
<Fragment>
<Component Id="C.CommonLib.dll" Guid="*">
<File Id="Fi.CommonLib.dll" Source="<path>CommonLib.dll" KeyPath="yes"/>
</Component>
<Directory Id="ProgramFilesFolder">
<Directory Id="Di.AExe" Name="AExe">
<Directory Id="Di.AExeBin" Name="bin">
<ComponentRef Id="C.CommonLib.dll"/>
</Directory>
</Directory>
<Directory Id="Di.BExe" Name="BExe">
<Directory Id="Di.BExeBin" Name="bin">
<ComponentRef Id="C.CommonLib.dll"/>
</Directory>
</Directory>
</Directory>
</Fragment>
但这不起作用,因为Directory
不允许Ref
作为孩子。你会怎么编码呢?
答案 0 :(得分:2)
从Windows Installer Component table可以看出,组件只能与一个目录关联。但是,没有什么能阻止您创建安装相同文件的两个不同组件:
<Component Id="CommonLib.dll.1" Directory="Di.AExeBin">
<File Id="CommonLib.dll.1" Source="...\CommonLib.dll"/>
</Component>
<Component Id="CommonLib.dll.2" Directory="Di.BExeBin">
<File Id="CommonLib.dll.2" Source="...\CommonLib.dll"/>
</Component>
(注意:我的示例适用于wix3,您可以使用Directory =“...”属性,但当然您也可以将这些组件放在目录父元素下。)