2013-01-31 27 views
2

我需要用戶瀏覽到文件,選擇它,然後將此文件從選定的源複製到應用程序文件夾。如何讓用戶瀏覽到要與Inno Setup一起復制的文件

下面這篇文章 How to show/use the user selected app path {app} in InputDirPage in Inno Setup? 和Inno Setup的文檔,我來到了這一段代碼:

[Files] 
Source: {code:GetDBPath}; DestDir: "{app}"; Flags: confirmoverwrite uninsneveruninstall; 

[Code] 
var 
    SelectDBPage: TInputDirWizardPage; 
    DBPath: String; 

procedure InitializeWizard; 
begin 
    SelectDBPage := CreateInputDirPage(wpSelectDir, 'Select file', 'Select file', 'Select file', False, ''); 
    SelectDBPage.Add(''); 
    SelectDBPage.Values[0] := ExpandConstant('{src}\DB.FDB'); 
    DBPath := SelectDBPage.Values[0]; 
end; 

function GetDBPath():String; 
begin 
    Result := DBPath; 
end; 

我的問題是要檢索文件的路徑。在指令'源:{code:GetDBPath}'我得到一個'未知的文件名前綴{code:'錯誤。 如何在[文件]部分中引用選定的文件路徑?

謝謝

+0

歡迎來到StackOverflow。看起來你很困惑。在編譯時從腳本讀取[files]部分。然後編譯器生成包含所有文件和安裝程序的說明的安裝程序。 InitializeWizard在運行時被調用(當生成的安裝程序運行時),因此無法顯示嚮導頁面來更改安裝程序中包含的文件。這與編程語言的編譯時和運行時非常相似。 – jachguate

+0

問題不明確的是,如果您想讓_user_在編譯時選擇要包含在腳本中的文件,或者如果您想讓_user_在目標計算機中選擇一個文件並移動/複製該文件文件到運行時在該目標計算機上的其他位置。 – jachguate

回答

2

您需要的external標誌添加到[Files]條目。這意味着源將在運行時進行評估,CAN可包含{code:...}常量。您的GetDBPath()函數中的值不正確。您將返回創建頁面後未更新的值DBPath,而不是從SelectDBPage.Values[0]獲取最新值。

+0

外部標誌是我需要的。但它似乎並沒有達到正確的價值。我的意思是,當我從瀏覽窗口中選擇文件時,我沒有看到輸入字段中的文件路徑更改,並且在下一步中我沒有選擇的值 – user2029958

+0

您沒有從頁面讀回數值。我已經更新了答案。 – Deanna

+0

非常感謝。我是inno setup腳本的新手。再次感謝。 – user2029958

相關問題