2012-06-07 6 views
5

Quiero instalar archivos en diferentes carpetas, dependiendo de si el usuario ha seleccionado instalar para todos los usuarios o solo para el usuario actual.Configurando DestDir de Inno Pascal?

He agregado CreateInputOptionPage() usado para crear una página de opciones con dos botones de opción.

Sin embargo, mi instalador ahora está plagada de una gran cantidad de líneas duplicadas, como estos dos:

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

¿Hay una manera más elegante de hacer lo anterior? ¿Puede el código Pascal, por ejemplo, crear una variable como #define para que pueda usarlo en lugar de {userdocs} y {commondocs} arriba?

Más detalles:

Los IsAllUsers función() por encima de llamadas de este código:

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

y:

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 dado una buena respuesta, pero recuerde que el usuario que ejecuta la instalación puede no ser el usuario esperado que está conectado a la computadora. En este caso, sus datos "solo este usuario" terminarán perteneciendo a un "este usuario" completamente diferente. – Deanna

Respuesta

6

Will algo así como este traje?

[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

Exactamente lo que estaba buscando, Sertac. No estaba al tanto de la sintaxis de {code:}. ¡Muchas gracias! – RobertFrank