Inno setup 将Inno设置自定义页面字段值保存到INI文件

Inno setup 将Inno设置自定义页面字段值保存到INI文件,inno-setup,ini,Inno Setup,Ini,如何将两个页面字段值的值读取并存储到INI文件中?我使用ISTool在INI部分创建了两个密钥对。现在我该如何连接这个 INI部分如下所示: [INI] Filename: {app}\prefs.ini; Section: AUTH; Key: USERNAME; String: Filename: {app}\prefs.ini; Section: AUTH; Key: PASSWORD; String: 页面的创建方式如下: [INI] Filename: {app}\prefs.i

如何将两个页面字段值的值读取并存储到INI文件中?我使用ISTool在INI部分创建了两个密钥对。现在我该如何连接这个

INI部分如下所示:

[INI]
Filename: {app}\prefs.ini; Section: AUTH; Key: USERNAME; String: 
Filename: {app}\prefs.ini; Section: AUTH; Key: PASSWORD; String: 
页面的创建方式如下:

[INI]
Filename: {app}\prefs.ini; Section: AUTH; Key: USERNAME; String: 
Filename: {app}\prefs.ini; Section: AUTH; Key: PASSWORD; String: 
AuthPage:=CreateInputQueryPage(wpWelcome,
'帐户信息','请输入您的帐户信息',
'');
AuthPage.Add('Username:',False);
AuthPage.Add('Password:',True);

编辑:

我做了以下补充。由于某些原因,它不起作用:

SetIniString('AUTH','USERNAME',AuthPage.Values[0],'{app}\prefs.ini'))
SetIniString('AUTH','PASSWORD',AuthPage.Values[1],'{app}\prefs.ini')

我认为您需要编写
ExpandConstant({app}\prefs.ini')
来展开
{app}
常量。

这应该可以:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{82C8C949-44A8-49C4-8CED-8DD0ACD0DCCF}
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\util\innosetup\5.3.7\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"; Tasks: desktopicon

[Run]
Filename: "{app}\MyProg.exe"; Description: "{cm:LaunchProgram,My Program}"; Flags: nowait postinstall skipifsilent

[INI]
Filename: {app}\prefs.ini; Section: AUTH; Key: USERNAME; String: {code:GetUserName}
Filename: {app}\prefs.ini; Section: AUTH; Key: PASSWORD; String: {code:GetPassword}


[code]
var
AuthPage : TInputQueryWizardPage;

procedure InitializeWizard;
begin
AuthPage := CreateInputQueryPage(wpWelcome,
    'Account Information', 'Please enter your Account Information',
    '');
  AuthPage.Add('Username:', False);
  AuthPage.Add('Password:', True);
end;

function AuthForm_NextButtonClick(Page: TWizardPage): Boolean;
begin
  Result := True;
end;

function GetUserName(Param: String): string;
begin
result := AuthPage.Values[0];
end;

function GetPassword(Param: String): string;
begin
result := AuthPage.Values[1];
end;
使用来自
[INI]
部分的条目:

[INI]
Filename: {app}\prefs.ini; Section: AUTH; Key: USERNAME; String: {code:GetAuth|0}
Filename: {app}\prefs.ini; Section: AUTH; Key: PASSWORD; String: {code:GetAuth|1}
[代码]
变量
AuthPage:TInputQueryWizardPage;
过程初始化Wizard();
开始
AuthPage:=CreateInputQueryPage(wpWelcome,
'帐户信息','请输入您的帐户信息',
'');
AuthPage.Add('Username:',False);
AuthPage.Add('Password:',True);
结束;
函数GetAuth(参数:String):String;
开始
结果:=AuthPage.Values[stroint(Param)];
结束;

如果将用户输入的值转换为INI文件条目的逻辑很复杂,您可能更希望使用from
[code]
部分。通常从事件函数:

过程CurStepChanged(CurStep:TSetupStep);
变量
文件名:字符串;
开始
如果CurStep=ssPostInstall,则
开始
IniFileName:=ExpandConstant(“{app}\prefs.ini”);
SetIniString('AUTH','USERNAME',AuthPage.Values[0],ini文件名);
SetIniString('AUTH','PASSWORD',AuthPage.Values[1],ini文件名);
结束;
结束;

的确如此。我非常喜欢这个:{code:GetUserName}谢谢!对于尝试执行相同操作时获得“必需的函数或过程“””的任何其他人:String:{code:GetUserName}String:{code:GetUserName}第一个将起作用,第二个将不起作用。