我正在尝试重写我用 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
指定的目录。如何强制安装程序使用正确的子目录?Layout
Media