Сохранить значения полей пользовательской страницы Inno Setup в INI-файл - PullRequest
3 голосов
/ 29 октября 2010

Как мне прочитать и сохранить значения двух полей страницы в файле INI? Я создал две пары ключей в разделе INI, используя ISTool. Теперь, как мне это связать?

Раздел INI выглядит следующим образом:

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

Страница создана так:

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

EDIT:

Я сделал следующие дополнения. По какой-то причине это не работает:

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

Ответы [ 3 ]

8 голосов
/ 30 октября 2010

Это должно работать:

; 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;
1 голос
/ 19 мая 2017

Использовать скриптовую константу из [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}
[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 GetAuth(Param: String): string;
begin
  Result := AuthPage.Values[StrToInt(Param)];
end;

Если логика преобразования введенных пользователем значений в записи файла INI является сложной, вы можете использовать SetIniString из раздела [Code]. Обычно из CurStepChanged функция события:

procedure CurStepChanged(CurStep: TSetupStep);
var
  IniFileName: string;
begin
  if CurStep = ssPostInstall then
  begin
    IniFileName := ExpandConstant('{app}\prefs.ini');
    SetIniString('AUTH', 'USERNAME', AuthPage.Values[0], IniFileName);
    SetIniString('AUTH', 'PASSWORD', AuthPage.Values[1], IniFileName);
  end;
end;
0 голосов
/ 30 октября 2010

Я считаю, что вам нужно написать ExpandConstant('{app}\prefs.ini'), чтобы расширить {app} константу.

...