gpt4 book ai didi

Wix - 多个功能之间的可重用组件

转载 作者:行者123 更新时间:2023-12-02 02:18:07 29 4
gpt4 key购买 nike

考虑以下场景:

  • CommonLib 项目
  • CommonLib.dll
  • AExe 项目
  • CommonLib.dll
  • AExe.exe
  • BExe 项目
  • CommonLib.dll
  • BExe.exe

  • 项目 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作为 child 。你会如何编码?

    P.S:我举了两个项目的例子,但实际上有更多的项目共享一个以上的公共(public)库,这就是我问这个的原因:)

    最佳答案

    从 Windows 安装程序中可以看出 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="..."属性,但当然您也可以将组件放在 Directory 父元素下。)

    关于Wix - 多个功能之间的可重用组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9484393/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com