我想用一个独立的INI文件分发编译后的安装程序。安装程序将从提供给该特定客户端的INI文件中加载配置(例如版本)。
在与ver.ini
相同的目录中有一个Setup.exe
文件。它包含-
[Version]
Ver=0.0.11
我想用它就像-
#define AppVer ReadIni("ver.ini", "Version", "Ver", "unknown")
问题: Inno安装程序将AppVer
显示为unknown
,而不是0.0.11
。
如果我对ver.ini
文件使用硬编码的文件路径,它可以工作:
#define AppVer ReadIni("C:\Users\Admin\Desktop\ver.ini", "Version", "Ver", "unknown")
由于我将安装程序分发给我的客户,所以我不能使用硬编码的文件路径。
任何帮助都是非常感谢的!
发布于 2022-03-23 11:46:25
您不能使用预处理器。预处理器在编译时执行。因此,即使您修复了路径问题(例如使用SourcePath
预处理变量),它也不会有帮助,因为您将在编译安装程序的机器上读取INI文件。不是在执行安装程序的机器上。
您必须使用Pascal脚本和脚本常数。使用函数读取INI文件,使用常量引用源目录。
[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;
https://stackoverflow.com/questions/71584455
复制相似问题