InnoSetup:如何通过读取文件来声明变量

时间:2013-01-25 21:15:00

标签: inno-setup

好的,我知道你可以在InnoSetup中做到这一点:

#define AppVer "0.0.11"

然后像

一样使用它
 [Setup]
 AppVerName={#AppVer}

现在假设我有一个名为“VERSION”的文件,其内容为“0.0.11”

文件VERSION的内容是否有某种方式进入InnoSetup变量?

4 个答案:

答案 0 :(得分:20)

使用ISPP的GetFileVersion功能是首选方法(因为您的安装程序版本应该与您的应用程序版本匹配)。所以如果这是你真正想做的事情,你应该接受jachguate的回答。

如果您确实想要从文本文件而不是从可执行文件中读取版本,那么有两种可能性:

第一种:如果你可以修改文件的内部格式,那么你可以通过使它看起来像一个INI文件来大大简化:

[Version]
Ver=0.0.11

鉴于此,您可以使用ISPP的ReadIni函数来检索版本:

#define AppVer ReadIni("ver.ini", "Version", "Ver", "unknown")

如果您无法更改文件格式,第二种方法是使用FileOpenFileReadFileClose ISPP函数,例如:

#define VerFile FileOpen("ver.txt")
#define AppVer FileRead(VerFile)
#expr FileClose(VerFile)
#undef VerFile

我再说一遍:最好从可执行文件本身获取应用程序版本。这有助于确保一切都匹配。

答案 1 :(得分:8)

您可以使用Inno Setup Pre Proccessor(ISPP)GetFileVersion函数直接从您的可执行文件中获取版本,如下所示:

[Setup]
#define AppVersion GetFileVersion("MyFile.exe")
#define AppName "My App name"

AppName={#AppName}
AppVerName={#AppName} {#AppVersion}
VersionInfoVersion={#AppVersion}

; etc

如果您正在使用定义,那么您已经在使用ISPP。

答案 2 :(得分:7)

如果您想在安装程序的运行时执行此操作(@jachguate的答案涵盖了另一种可能性,并且可能是您正在寻找的那种 - 我将留下它,以防它在某些时候帮助其他人) ,你可以使用它的Pascal脚本来做到这一点。这样的事情应该有效:

[Setup]
AppVer={code:MyVersion}

[Files]
// Other files
Source: "YourVersionFile.txt"; DestDir: "{app}"

[Code]
function MyVersion(Param: String): String;
var
  VersionValue: string;
  VersionFile: string;
begin
  // Default to some predefined value.
  Result := '0.0.0';
  VersionFile := '{app}\YourVersionFile.txt';
  if LoadStringFromFile(VersionFile, VersionValue) then
    Result := VersionValue;
end;

有关详细信息,请参阅帮助文件主题“Pascal Scripting”,包括支持的内置函数列表。

答案 3 :(得分:1)

来自:http://www.jrsoftware.org/ishelp/

支持类似C的#include指令,它将单独的文件中的行拉入#include指令位置的脚本中。语法是:

#include "filename.txt"

如果文件名不是完全限定的,编译器将在与包含#include指令的文件相同的目录中查找它。文件名可能以compiler:为前缀,在这种情况下,它会在Compiler目录中查找该文件。