【发布时间】:2011-01-18 06:51:38
【问题描述】:
我有一个安装程序,它链接了一个 wixlib。 wixlib 将一个可执行文件安装到多个目录。
当我为 wixlib(使用 -bf 开关)打开“将文件绑定到库文件”时,lit.exe 会将可执行文件添加到 wixlib。但是,当我在 MSI 中链接 wixlib 时,可执行文件会多次添加到 MSI 文件中,从而使安装程序变大。
当我关闭“将文件绑定到库文件”时,问题不会发生(但显然,我需要设置 WiX 安装程序项目以知道在哪里可以找到可执行文件,而不是在 wixlib 中查找)。
使用或不使用 -bf 开关,使用 orca 查看时最终的 MSI 文件看起来相似,所以我很难理解为什么第一种情况下的 MSI 需要包含多个副本。
wixlib wxs 文件如下所示:
<Fragment>
<ComponentGroup Id="cmpFoo1">
<ComponentRef Id="cmpFooExe1" />
</ComponentGroup>
<DirectoryRef Id="TARGET_PATH1">
<Component Id="cmpFooExe1" Guid="*">
<File Id="filFooExe1" Name="foo.exe" KeyPath="yes" Source="$(var.source_path)\foo.exe" />
</Component>
</DirectoryRef>
<ComponentGroup Id="cmpFoo2">
<ComponentRef Id="cmpFooExe2" />
</ComponentGroup>
<DirectoryRef Id="TARGET_PATH2">
<Component Id="cmpFooExe2" Guid="*">
<File Id="filFooExe2" Name="foo.exe" KeyPath="yes" Source="$(var.source_path)\foo.exe" />
</Component>
</DirectoryRef>
<Feature Id="ftFooFeatures" Level="1">
<ComponentGroupRef Id="cmpFoo1"/>
<ComponentGroupRef Id="cmpFoo2"/>
</Feature>
</Fragment>
安装程序的 wxs 文件如下:
<Product Id="MyProduct" Name="ProductName" Language="1033" Version="1.0.0.0" Manufacturer="MyCompany" UpgradeCode="{UpgradeCode_Guid}">
<!-- ...etc... -->
<Directory Id="ROOT_TARGET_PATH" Name="Foo">
<Directory Id="TARGET_PATH1" Name="Foo1" ComponentGuidGenerationSeed="{Guid1}" />
<Directory Id="TARGET_PATH2" Name="Foo2" ComponentGuidGenerationSeed="{Guid2}" />
</Directory>
<Feature Id="ftMain" Level="1">
<FeatureRef Id="ftFooFeatures" />
</Feature>
<!-- ...etc... -->
</Product>
预计最终的安装清单将类似于: c:\foo\foo1\foo.exe c:'foo\foo2\foo.exe
有没有办法阻止 WiX(可能是链接器?)将 foo.exe 的多个副本添加到最终的 MSI 文件,同时仍将 foo.exe 与 wixlib 绑定?
【问题讨论】:
标签: wix windows-installer wix3