2012-06-07 11 views
5

Desidero installare i file in cartelle diverse, a seconda che l'utente abbia scelto di installare per tutti gli utenti o solo l'utente corrente.Impostazione DestDir di Inno Pascal?

Ho aggiunto usato CreateInputOptionPage() per creare una pagina di opzioni con due pulsanti di opzione.

Tuttavia, la mia installazione è ora cosparso di un sacco di linee duplicate, come questi due:

Source: {#ProjectRootFolder}\License.txt; DestDir: {userdocs}\{#MyAppName}; Check: NOT IsAllUsers 
Source: {#ProjectRootFolder}\License.txt; DestDir: {commondocs}\{#MyAppName}; Check:IsAllUsers 

Esiste un modo più elegante per fare quanto sopra? Il codice Pascal può, ad esempio, creare una variabile come #define, così posso usarla al posto di {userdocs} e {commondocs} sopra?

Ulteriori dettagli:

I IsAllUsers) la funzione (sopra le chiamate di questo codice:

function IsAllUsers: Boolean; 
begin 
#ifdef UPDATE 
    Result := AllUsersInRegistryIsTRUE; 
#else 
    Result := AllUsersOrCurrentUserPage.Values[1]; // wizard page second radio button 
#endif 
end; 

e:

function AllUsersInRegistryIsTRUE: Boolean; // True if preceding install was to all users' documents 
var 
    AllUsersRegValue: AnsiString; 
begin 
    if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\MyApp', 'AllUsers', AllUsersRegValue) then 
    Result := (UpperCase(AllUsersRegValue) = 'YES') 
    else 
    Result := FALSE; 
end; 
+1

Sertac ha dato una buona risposta, ma ricordate che l'utente Runnign l'installazione non può essere l'utente prevede che sono collegati al computer. In questo caso, i tuoi dati "solo questo utente" finiranno per appartenere a un "utente" completamente diverso. – Deanna

risposta

6

Will qualcosa come questo vestito?

[Files] 
Source: {#ProjectRootFolder}\License.txt; DestDir: {code:GetDir}\{#MyAppName}; 

... 

[Code] 
var 
    OptionsPage: TInputOptionWizardPage; 

procedure InitializeWizard; 
begin 
    OptionsPage := CreateInputOptionPage(wpUserInfo, 
       'please select', 'the kind of installation', 'and continue..', 
       True, False); 
    OptionsPage.Add('All users'); 
    OptionsPage.Values[0] := True; 
    OptionsPage.Add('This user'); 
end; 

function GetDir(Dummy: string): string; 
begin 
    if OptionsPage.Values[0] then 
    Result := ExpandConstant('{commondocs}') 
    else 
    Result := ExpandConstant('{userdocs}'); 
end; 
+0

Esattamente quello che stavo cercando, Sertac. Non ero a conoscenza della sintassi {code:}. Grazie mille! – RobertFrank