我有一个InnoSetup脚本,它读取一个json文件来获取一些值(大多数是布尔值和字符串)。为了实现这一点,我使用了从这里下载的Tlamas JSONConfig.dll:https://github.com/nsdevaraj/inno-json-config。现在的问题是它无法从json-file读取值,因此只使用作为函数参数的默认值。我尝试调试它,但不知道如何调试,向其添加日志,并尝试通过向其代码添加调试日志来更新JSONConfig.dll,但只得到异常。
我做错什么了?感谢你能帮我。
我的原始代码是公司代码,所以我使用inno-json-config中给出的示例来做同样的事情,但失败了,所以我将发布该代码。我使用的是Inno Setup 5.6.1。变量WideString无法识别,我将其更改为String。
Example.iss
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=userdocs:Inno Setup Examples Output
[Files]
Source: "C:\inno-json-config-master\JSONConfig.dll"; Flags: dontcopy
[code]
function JSONQueryString(FileName, Section, Key, Default: String;
var Value: String; var ValueLength: Integer): Boolean;
external 'JSONQueryString@files:jsonconfig.dll stdcall';
function JSONQueryBoolean(FileName, Section, Key: String;
Default: Boolean; var Value: Boolean): Boolean;
external 'JSONQueryBoolean@files:jsonconfig.dll stdcall';
function BoolToStr(Value: Boolean): string;
begin
Result := 'True';
if not Value then
Result := 'False';
end;
procedure InitializeWizard;
var
FileName: String;
IntValue: Integer;
StrValue: String;
StrLength: Integer;
BoolValue: Boolean;
begin
FileName := 'C:\inno-json-config-master\Example.json';
if FileExists(FileName) then begin
Log('file found');
end else begin
Log('file not found');
end;
SetLength(StrValue, 16);
StrLength := Length(StrValue);
Log('StrValue_before:' + StrValue);
Log('BoolValue_before: ' + BoolToStr(BoolValue));
if JSONQueryString(FileName, 'Section_1', 'Key_1', 'Default', StrValue, StrLength) then
begin
MsgBox('Section_1:Key_1=' + StrValue, mbInformation, MB_OK);
end;
Log('Section_1:Key_1=' + StrValue);
if JSONQueryBoolean(FileName, 'Section_1', 'Key_3', True, BoolValue) then
begin
MsgBox('Section_1:Key_3=' + BoolToStr(BoolValue), mbInformation, MB_OK);
end;
Log('Section_1:Key_3=' + BoolToStr(BoolValue));
if JSONQueryBoolean(FileName, 'Section_2', 'Key_3', True, BoolValue) then
begin
MsgBox('Section_2:Key_3=' + BoolToStr(BoolValue), mbInformation, MB_OK);
end;
Log('Section_2:Key_3=' + BoolToStr(BoolValue));
end;
{
"Section_1": {
"Key_1": "String 1",
"Key_2": "1",
"Key_3": "True"
},
"Section_2": {
"Key_1": "String 2",
"Key_2": "2",
"Key_3": "False"
}
}
1条答案
按热度按时间kgqe7b3p1#
我发现了另一个解决问题的方法,那就是使用ini文件。Inno安装程序有内置的函数来读取/写入ini文件。这样我保存了很多时间,而且ini文件对用户来说也很容易读取。