我正在尝试重写我用wix编写的msi包,以使用外部而不是嵌入式文件。为此,我已经替换了以下MediaTemplate
元素:
<MediaTemplate EmbedCab="yes" />
使用Media元素。我想要嵌入一些文件,其他文件应该是外部文件。为此,我创建了以下两个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
目录。如何强制安装程序使用正确的子目录?
答案 0 :(得分:0)
我的问题是,我将Package@Compressed
属性设置为yes
。这在某种程度上干扰了未压缩的资源,所以我删除了它。现在我已经在Media元素中组织了所有资源。不幸的是,我无法混合压缩和未压缩的资源。我无法指定Media@Layout
属性,但仍然有一个正常工作的安装程序。但是外部化所有资源就是这样的。