2013-08-22 76 views
0

我正在嘗試重寫用wix創作的msi包以使用外部而不是嵌入式文件。爲此,我已經取代了以下MediaTemplate元素:如何在wix中從外部目錄安裝文件?

<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。第一個File元素中的DiskId屬性可以省略。安裝嵌入的文件工作正常,但是安裝壓縮的文件失敗,並在安裝日誌中以下條目:

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\。安裝程序Falsely將搜索安裝的根目錄而不是Files目錄,如我的第二個Media元素的Layout屬性中指定的那樣。我如何強制安裝程序使用正確的子目錄?

回答

0

我的問題是,我設置[email protected]屬性爲yes。這不知何故干涉了未壓縮的資源,所以我刪除了它。現在我已將所有資源整理到Media元素中。不幸的是,我無法混合壓縮和未壓縮的資源。而且我還沒有能夠指定[email protected]屬性,並且仍然有可用的安裝程序。但是,外部化所有資源這樣工作。