2013-04-14 4 views
4

Dans une configuration, je donne à l'utilisateur la possibilité d'installer une version 32 ou 64 bits en utilisant des boutons radio. Je veux ensuite ajouter «_32» ou «_64» à AppID. Je sais que je peux changer AppID en utilisant des constantes scriptées mais la fonction nécessaire est appelée pendant le démarrage du programme d'installation. Mais à ce stade, les boutons radio n'existent pas encore et donc je reçois l'erreur "Impossible d'appeler proc". J'ai consulté l'aide d'Inno Setup et j'ai lu que vous pouvez changer l'AppID à un moment donné avant que le processus d'insatllation ait commencé (si je comprends bien).Modifier AppID en utilisant [Code] juste avant l'installation dans Inno Setup

Alors, comment puis-je faire cela?

J'attends vos réponses avec impatience!

Répondre

8

Certaines des fonctions {code:...} pour certaines valeurs de directive sont appelées plusieurs fois et AppId en fait partie. Pour être plus précis, il est appelé deux fois. Une fois avant la création d'un formulaire d'assistant et une fois avant le début de l'installation. Ce que vous pouvez faire est juste de vérifier si la case à cocher que vous essayez d'obtenir la valeur existe. Vous pouvez simplement demander si c'est Assigned comme suit:

[Setup] 
AppId={code:GetAppID} 
... 

[Code] 
var 
    Ver32RadioButton: TNewRadioButton; 
    Ver64RadioButton: TNewRadioButton; 

function GetAppID(const Value: string): string; 
var 
    AppID: string; 
begin 
    // check by using Assigned function, if the component you're trying to get a 
    // value from exists; the Assigned will return False for the first time when 
    // the GetAppID function will be called since even WizardForm not yet exists 
    if Assigned(Ver32RadioButton) then 
    begin 
    AppID := 'FDFD4A34-4A4C-4795-9B0E-04E5AB0C374D'; 
    if Ver32RadioButton.Checked then 
     Result := AppID + '_32' 
    else 
     Result := AppID + '_64'; 
    end; 
end; 

procedure InitializeWizard; 
var 
    VerPage: TWizardPage; 
begin 
    VerPage := CreateCustomPage(wpWelcome, 'Caption', 'Description'); 
    Ver32RadioButton := TNewRadioButton.Create(WizardForm); 
    Ver32RadioButton.Parent := VerPage.Surface; 
    Ver32RadioButton.Checked := True; 
    Ver32RadioButton.Caption := 'Install 32-bit version'; 
    Ver64RadioButton := TNewRadioButton.Create(WizardForm); 
    Ver64RadioButton.Parent := VerPage.Surface; 
    Ver64RadioButton.Top := Ver32RadioButton.Top + Ver32RadioButton.Height + 4; 
    Ver64RadioButton.Caption := 'Install 64-bit version'; 
end; 
+0

Merci, TLama! Je ne savais pas vraiment tout ça mais tu as encore fait ma journée en partageant tes connaissances :) – user1662035

+0

De rien! :-) – TLama