如何在wix中安装外部目录中的文件?

时间:2013-08-22 15:34:34

标签: file directory wix copy

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

1 个答案:

答案 0 :(得分:0)

我的问题是,我将Package@Compressed属性设置为yes。这在某种程度上干扰了未压缩的资源,所以我删除了它。现在我已经在Media元素中组织了所有资源。不幸的是,我无法混合压缩和未压缩的资源。我无法指定Media@Layout属性,但仍然有一个正常工作的安装程序。但是外部化所有资源就是这样的。