2011-11-18 302 views
10

我想爲32/64位安裝動態地派生源文件夾(和目標文件夾)。那麼如何在Inno安裝程序的[Files]部分指定它。 下面給出一個編譯錯誤: - >如何在Inno Setup的[Files]部分使用「代碼」?

[Files] 
Source: {#MySourcePath}\{code:GetSourceLibFolder}\*.jar; DestDir: {code:GetAppDir}\lib\; 

我在代碼段中定義的GetSourceLibFolder()GetAppDir()功能。 功能非常簡單,只是返回一個變量:

function GetSourceLibFolder(Param: String): String; 
begin 
    Result:= SourceLibFolder; 
end; 

function GetSourceBinFolder(Param: String): String; 
begin 
    Result:= SourceBinFolder; 
end; 

謝謝!

+1

我不確定我們是否可以從'[Code]'調用我們的代碼並在InnoSetup腳本的其他地方使用它們。如何使用'#define'語句來創建一個應用你的函數的字符串(就像在[http://stackoverflow.com/questions/2329979/can-the-setup-filename-be-derived-from-the-executable -file-version-number](http://stackoverflow.com/questions/2329979/can-the-setup-filename-be-derived-from-the-executable-file-version-number)) –

+0

這個源代碼在哪裏lib文件夾:它是否在相對於InnoSetup腳本的基礎文件夾的源文件夾中?當你可以使用'{app}'時,爲什麼你要關注目標文件夾?例如:假設您的InnoSetup腳本文件位於'。\'文件夾中,並且您的jar庫位於'。\ install \ lib'中,並且您希望它們位於應用程序文件夾'{app}'的'lib'文件夾中,你可以定義'Source:「install \ lib \ *。jar」; DestDir:「{app} \ lib」簡單的方法:通過在每個腳本文件中定義不同的源文件夾,可以爲每個32位和64位安裝程序分別創建一個InnoSetup腳本。 – ecle

+0

@eee:我想要一個32位和64位系統的安裝程序,所以我有兩個不同的「lib」文件夾,即。 lib-32和lib-64,我動態設置,因此想動態讀取它們。 – Saurabh

回答

4

源代碼路徑需要在編譯時使用(除非你有external標誌),這意味着你必須使用ISPP和#define[Code]部分僅用於運行/安裝時間代碼,因此可用於目標路徑。

如果您提供了GetSourceLibFolder函數的代碼,則可以將其轉換爲ISPP。

+0

謝謝!我編輯了我的原始文章以包含函數定義。 – Saurabh

+0

又是什麼'SourceLibFolder'?記住它需要在編譯時獲得,而不是運行時。 – Deanna

+0

'SourceLibFolder'是一個全局變量,它在'[Setup]'部分的'DefaultDestDir'變量的代碼段中獲取它的值:'DefaultDirName = {code:SetProgramFileLocation} \ HP \ Pulse \ {#MyAppName} – Saurabh