1

我正在尝试重写我用 wix 编写的 msi 包以使用外部文件而不是嵌入式文件。为此,我替换了以下MediaTemplate元素:

<MediaTemplate EmbedCab="yes" />

与媒体元素。我希望我的一些文件被嵌入,而其他文件应该是外部的。为此,我创建了以下两个Media元素

<Media Id="1" Cabinet="MyCab.cab" EmbedCab="yes" />
<Media Id="2" DiskPrompt="!(loc.DskPrmptDisk1)" Layout="Files"/>

以下是File引用每个元素的元素的两个示例Media

<File Id="EmbeddedIniFile.ini" Name="SomeIni.ini" Source="Features\All-in-one\Files\IniFiles\SomeIni.ini" KeyPath="yes" Compressed="yes" DiskId="1"/>
<File Id="AppData.exe" Name="AppData.exe" Vital="no" Source="Features\AnotherFeature\Files\ExeFiles\AppData.exe" KeyPath="yes" Compressed="no" DiskId="2"/>

如您所见,第一个File元素的Compressed属性设置为yes,而第二个元素的Compressed属性设置为no。第一个元素中的DiskId属性File可以省略。安装嵌入文件工作正常,但安装未压缩文件失败,安装日志中显示以下条目:

MSI (s) (E8:00) [16:56:45:570]: Executing op: ChangeMedia(MediaVolumeLabel=Label,MediaPrompt=Insert Disk.,,BytesPerTick=32768,CopierType=0,,,,,,IsFirstPhysicalMedia=0)
MSI (s) (E8:00) [16:56:45:570]: Executing op: FileCopy(SourceName=AppData.exe,SourceCabKey=AppData.exe,DestName=AppData.exe,Attributes=8704,FileSize=451072,PerTick=32768,,VerifyMedia=1,,,,,CheckCRC=0,Version=5.5.3.0,Language=1031,InstallMode=58982400,,,,,,,)
MSI (s) (E8:00) [16:56:45:570]: File: C:\Programs\MyProgramme\AppData.exe;  To be installed;    Won't patch;    No existing file

MSI (s) (E8:00) [16:56:45:570]: Source for file 'AppData.exe' is uncompressed, at 'C:\Documents and Settings\user\'.

InstallFiles: File: AppData.exe, Directory: C:\Programs\MyProgramme\, Size: 451072
MSI (s) (E8:00) [16:56:45:570]: Note: 1: 2318 2: C:\Programs\MyProgramme\AppData.exe 
MSI (s) (E8:00) [16:56:45:570]: Note: 1: 1308 2: C:\Documents and Settings\user\AppData.exe 

请注意,我已将安装文件移至用户文件夹C:\Documents and Settings\user\。安装程序错误地搜索安装的根目录,而不是我的第二个元素的属性中Files指定的目录。如何强制安装程序使用正确的子目录?LayoutMedia

4

1 回答 1

0

我的问题是,我将Package@Compressed属性设置为yes. 这以某种方式确实干扰了未压缩的资源,因此我将其删除。现在我已经将我所有的资源都整理到了媒体元素中。不幸的是,我无法混合压缩和未压缩的资源。而且我无法指定Media@Layout属性并且仍然有一个工作安装程序。但是将所有资源外部化是这样工作的。

于 2013-12-13T10:56:08.740 回答