2010-10-29 32 views
3

Comment lire et stocker les valeurs de valeurs de champ de deux pages dans un fichier INI? J'ai créé deux paires de clés dans la section INI en utilisant ISTool. Maintenant, comment puis-je relier cela?Enregistrer les valeurs de champ de page personnalisées d'Inno Setup dans un fichier INI

L'INI Section ressemble à ceci:

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

page est créée comme ceci:

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

EDIT:

J'ai fait les ajouts suivants. Il ne fonctionne pas pour une raison:

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

Répondre

8

Cela devrait fonctionner:

; 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; 
+0

Il a fait. J'ai beaucoup aimé ça: "{code: GetUserName}" Merci! –

+0

Pour quelqu'un d'autre obtenir "fonction requise ou d'une procédure« " tout en essayant de faire la même chose: Chaîne: {code: GetUserName} chaîne: { code: GetUserName} D'abord on va travailler, deuxième on ne le fera pas. – lungic

0

Je crois que vous devez écrire ExpandConstant('{app}\prefs.ini') pour développer la constante {app}.

+0

pas - vous ne - qui est seulement nécessaire dans la section de code – debracey

0

Utilisez un scripted constant de [INI] entrées de section:

[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; 

Si une logique de transformer les valeurs entrées par l'utilisateur dans les entrées du fichier INI est complexe, vous pouvez préférer utiliser SetIniString depuis [Code] section. En règle générale de CurStepChanged fonction d'événement:

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;