2012-06-07 11 views
5

Chcę zainstalować pliki w różnych folderach, w zależności od tego, czy użytkownik wybrał instalację dla wszystkich użytkowników, czy tylko dla bieżącego użytkownika.Ustawienia DestDir z Inno Pascal?

Dodałem używane CreateInputOptionPage(), aby utworzyć stronę opcji za pomocą dwóch przycisków opcji.

Jednak mój instalator jest teraz pełno z dużą ilością duplikatów wierszy, jak tych dwóch:

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

Czy jest bardziej elegancki sposób to zrobić powyższych? Czy na przykład kod Pascala może utworzyć zmienną taką jak #define, więc mogę jej użyć zamiast powyższych {userdocs} i {commondocs}?

Więcej szczegółów:

The IsAllUsers (funkcja) powyżej nazywa ten kod:

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

oraz:

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 dał dobrą odpowiedź, ale należy pamiętać, że użytkownik uruchamia instalację może nie być oczekiwanym użytkownikiem, który jest zalogowany na komputerze. W takim przypadku dane "tylko tego użytkownika" będą należały do ​​zupełnie innego "użytkownika". – Deanna

Odpowiedz

6

Will coś takiego garnitur?

[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

Dokładnie tego, czego szukałem, Sertac. Nie wiedziałem o składni {code:}. Dzięki wielkie! – RobertFrank

Powiązane problemy