好的,我知道你可以在InnoSetup中做到这一点:
#define AppVer "0.0.11"
然后像
一样使用它 [Setup]
AppVerName={#AppVer}
现在假设我有一个名为“VERSION”的文件,其内容为“0.0.11”
文件VERSION的内容是否有某种方式进入InnoSetup变量?
答案 0 :(得分:20)
使用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
我再说一遍:最好从可执行文件本身获取应用程序版本。这有助于确保一切都匹配。
答案 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目录中查找该文件。