2011-11-18 300 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