好的,我知道您可以在 Inno Setup 中执行此操作:
#define AppVer "0.0.11"
然后像这样使用它
[Setup]
AppVerName={#AppVer}
现在想象我有一个名为VERSION
“0.0.11”的文件。
有没有办法以某种方式将文件内容VERSION
放入 Inno Setup 预处理器变量?
好的,我知道您可以在 Inno Setup 中执行此操作:
#define AppVer "0.0.11"
然后像这样使用它
[Setup]
AppVerName={#AppVer}
现在想象我有一个名为VERSION
“0.0.11”的文件。
有没有办法以某种方式将文件内容VERSION
放入 Inno Setup 预处理器变量?
使用ISPP 的GetFileVersion
功能是首选方法(毕竟您的安装程序版本应该与您的应用程序版本匹配)。因此,如果这是您真正想要做的,您应该接受 jachguate 的回答。
如果您确实想从文本文件而不是可执行文件中读取版本,则有两种可能性:
第一个:如果您可以修改文件的内部格式,那么您可以通过使其看起来像一个 INI 文件来大大简化事情:
[Version]
Ver=0.0.11
鉴于此,您可以使用 ISPP 的ReadIni
函数来检索版本:
#define AppVer ReadIni("ver.ini", "Version", "Ver", "unknown")
如果您无法更改文件格式,则第二种选择是使用FileOpen
、FileRead
和FileClose
ISPP 函数,例如:
#define VerFile FileOpen("ver.txt")
#define AppVer FileRead(VerFile)
#expr FileClose(VerFile)
#undef VerFile
不过,我再说一遍:最好从可执行文件本身获取应用程序版本。一方面,这有助于确保一切都匹配。
您可以使用 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。
如果您想在安装程序的运行时执行此操作(@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 脚本”,包括受支持的内置函数的列表。
来自:http ://www.jrsoftware.org/ishelp/
支持类似 C 的 #include 指令,它将单独文件中的行拉入脚本中 #include 指令的位置。语法是:
#include "filename.txt"
如果文件名不是完全限定的,编译器将在与包含该#include
指令的文件相同的目录中查找它。文件名可能以 为前缀compiler:
,在这种情况下,它会在 Compiler 目录中查找文件。