我有一個INNO安裝程序,它像一個魅力一樣工作。現在我需要爲用戶預先安裝主題選項以選擇應用程序的主題。這些主題是在安裝時複製到{tmp}文件夾的部署目錄中定義的。INNO安裝程序在安裝前開始安裝時提取目錄樹
我想要做的是在這個目錄部分查找特定的目錄/文件來確定主題選項。當我找到一個主題時,我會將一個選項添加到組合框供用戶選擇。此選擇將影響應用程序的安裝(也來自{tmp}區域)。
我的問題是,直到點擊安裝按鈕,文件纔會被提取到{tmp}目錄。有沒有辦法在安裝之前查看壓縮文件結構或強制這些文件到{tmp}目錄?文件結構對於每個主題都是不同的,並且基於客戶只有某些主題可用。
我以前使用過ExtractTemporaryFile方法,但我不知道在運行時存在哪些主題,直到解壓目錄爲止。能夠提取整個目錄樹會很好,但我找不到一個簡單的方法來完成此操作。
感謝您的幫助。
下面是什麼,我本來想做一個示例腳本:
[Setup]
AppName=Test
AppVersion=1.5
DefaultDirName={pf}\test
OutputDir=Output
OutputBaseFilename=tt
DisableReadyPage=false
[Files]
;;Source: readme.txt; DestDir: {tmp}\App\deploy\themes\theme1; Flags: ignoreversion replacesameversion
;;Source: readme.txt; DestDir: {tmp}\App\deploy\themes\theme2; Flags: ignoreversion replacesameversion
;;Source: readme.txt; DestDir: {tmp}\App\deploy\themes\theme3; Flags: ignoreversion replacesameversion
;;Source: readme.txt; DestDir: {tmp}\App\deploy\themes\theme4; Flags: ignoreversion replacesameversion
Source: App\*.*; DestDir: {tmp}\App; Flags: ignoreversion replacesameversion recursesubdirs createallsubdirs
Source: readme.txt; DestDir: {app}; Flags: ignoreversion replacesameversion
[Run]
[Code]
var
curDir : String;
TestPage : TWizardPage;
ThemeComboBox: TNewComboBox;
procedure InitializeWizard;
begin
TestPage := CreateCustomPage(wpSelectTasks, 'My test page', 'run test');
// create the theme combo box
ThemeComboBox := TNewComboBox.Create(TestPage);
ThemeComboBox.Name := 'themeselection';
ThemeComboBox.Width := TestPage.SurfaceWidth;
ThemeComboBox.Parent := TestPage.Surface;
ThemeComboBox.Style := csDropDownList;
end;
function NextButtonClick(CurPageID: Integer): Boolean;
var
ThemeDir: String;
begin
Result := True;
if CurPageID = wpSelectDir then
begin
// look for the networks and then add the ones that exist to the combo box
ThemeDir := ExpandConstant('{tmp}\App\deploy\themes\tmeme1');
MsgBox(ThemeDir, mbInformation, MB_OK);
if DirExists(ThemeDir) then
begin
// populate the combo box
// this is theme1 so it is Standard
ThemeComboBox.Items.Add('Standard');
end;
ThemeDir := ExpandConstant('{tmp}\App\deploy\themes\theme2');
if DirExists(ThemeDir) then
begin
// populate the combo box
ThemeComboBox.Items.Add('theme2');
end;
ThemeDir := ExpandConstant('{tmp}\App\deploy\themes\theme3');
if DirExists(ThemeDir) then
begin
// populate the combo box
ThemeComboBox.Items.Add('theme3');
end;
ThemeDir := ExpandConstant('{tmp}\App\deploy\themes\theme4');
if DirExists(ThemeDir) then
begin
// populate the combo box
ThemeComboBox.Items.Add('theme4');
end;
end;
end;
你能舉個例子嗎?我不確定我是否知道你在說什麼。謝謝。 – 2012-03-05 13:11:19
Steve,添加了一個例子(相當晚了:-) @Deanna,我認爲從InnoSetup預處理器輸出的東西不會輸出到運行時輸出(*輸出直接輸入到一個pascal數組*)。常量數組不受支持。 – TLama 2012-07-30 00:11:55
@TLama正如你已經證明的那樣,它可以輸出代碼來填充數組,雖然:) – Deanna 2012-07-30 08:49:23