13

好的,我知道您可以在 Inno Setup 中执行此操作:

#define AppVer "0.0.11"

然后像这样使用它

[Setup]
AppVerName={#AppVer}

现在想象我有一个名为VERSION“0.0.11”的文件。

有没有办法以某种方式将文件内容VERSION放入 Inno Setup 预处理器变量?

4

4 回答 4

24

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

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

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

[Version]
Ver=0.0.11

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

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

如果您无法更改文件格式,则第二种选择是使用FileOpenFileReadFileCloseISPP 函数,例如:

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

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

于 2013-01-27T12:38:53.290 回答
11

您可以使用 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。

于 2013-01-25T21:59:15.770 回答
8

如果您想在安装程序的运行时执行此操作(@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 脚本”,包括受支持的内置函数的列表。

于 2013-01-25T21:29:44.883 回答
1

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

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

#include "filename.txt"

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

于 2013-04-25T22:53:47.963 回答