【发布时间】:2014-09-05 14:22:54
【问题描述】:
我有一个 100MB 的 .msm,当我构建我的 WiX 项目时,我得到一个 200MB 的 .msi 这里有一些代码:
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<Media Id="1" Cabinet="product.cab" EmbedCab="yes" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Merge Id="MyMsmFile" Language="1033" SourceFile="msm\MyMsmFile.msm"
DiskId="1" FileCompression="yes" />
<Directory Id="INSTALLFOLDER" Name="Foo" >
</Directory>
</Directory>
<Feature Id="Foo_client" Title="Foo Client" Level="1"
ConfigurableDirectory="INSTALLFOLDER" >
<Feature Id="Server" Title="Foo Server" Level="32767">
<MergeRef Id="MyMsmFile" />
</Feature>
</Feature>
编辑:
请注意
这就像我看到带有 7z 的 .msm 的内容(看起来像带有 ! 前缀的 orca 表和一个名为 MergeModule.CABinet 的文件等)。
这就像我看到带有 7z(文件名)的 .msi 的内容。
编辑 2:
看起来我包含了 2 次 msm。如果我设置 EmbedCab="no" 我的 msi 仍然超过 100MB 加上 100MB 的 product.cab。
请看一下这个修改后的代码:
<Product Id="PUT-GUID-HERE"
Name="MyProduct"
Language="1033"
Version="0.0.1"
Manufacturer="MyCompany"
UpgradeCode="PUT-GUID-HERE">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<Media Id="1" Cabinet="product.cab" EmbedCab="no" CompressionLevel="high" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<UIRef Id="WixUI_FeatureTree" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="INSTALLFOLDER" Name="MyProduct" >
<Merge Id="ThirdPartModule" Language="1033" SourceFile="ThirdPartModule.msm" DiskId="1" />
</Directory>
</Directory>
<Feature Id="Server" Title="MyProduct Server" Level="1" >
<MergeRef Id="ThirdPartModule" />
</Feature>
</Product>
这是一个 VisualStudio 2012 项目 - 发布 - x64。
终于...
我选择了一个烧录引导程序项目,很抱歉造成混乱:D
【问题讨论】:
-
这是您自己的合并模块吗?如果是这样,您应该使用Wix include files 而不是合并模块。
-
不,这是一个第三方模块。
-
运行已编译 MSI 的管理映像以查看已编译到其中的内容:
msiexec /a File.msi。 -
在合并模块上使用包含/片段是个人意见,并不普遍适用。各有利弊。
标签: wix installation windows-installer