从 Inno Setup 中同一目录中存储的 .ini 文件读取安装程序版本

问题描述 投票:0回答:1

我想使用单独的 INI 文件分发已编译的安装程序。安装程序将从提供给该特定客户端的 INI 文件加载配置(例如版本)。

我在与

ver.ini
相同的目录中有一个
Setup.exe
文件。它包含-

[Version]
Ver=0.0.11

我想像这样使用它-

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

问题:Inno Setup 将

AppVer
显示为
unknown
,而不是
0.0.11

如果我对

ver.ini
文件使用硬编码文件路径,则它可以工作:

#define AppVer ReadIni("C:\Users\Admin\Desktop\ver.ini", "Version", "Ver", "unknown")

由于我要将安装程序分发给客户,因此我无法使用硬编码的文件路径。

如有任何帮助,我们将不胜感激!

inno-setup pascalscript
1个回答
1
投票

您不能使用预处理器。预处理器在编译时执行。因此,即使您修复了路径问题(例如使用

SourcePath
预处理器变量),也无济于事,因为您将在 编译 安装程序的计算机上读取 INI 文件。不在安装程序执行的机器上。


您必须使用 Pascal 脚本和

脚本常量。使用GetIniString

函数
读取INI文件,使用src
常量
引用源目录。

[Setup] AppVersion={code:GetAppVersion}
[Code]

function GetAppVersion(Param: string): string;
var
  IniPath: string;
begin
  IniPath := ExpandConstant('{src}\ver.ini');
  Result := GetIniString('Version', 'Ver', 'Unknown', IniPath);
end;


如果找不到版本,您可能想中止安装:

function GetAppVersion(Param: string): string; var IniPath: string; begin IniPath := ExpandConstant('{src}\ver.ini'); Result := GetIniString('Version', 'Ver', '', IniPath); if Result = '' then RaiseException('Cannot find version'); end;
    
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.