2016-03-30 3 views
1

Ich brauche benutzerdefinierte Seite von zwei Ziel erstellen.Verwenden Sie zwei/mehrere ausgewählte Verzeichnisse von benutzerdefinierten Seite im Abschnitt Dateien

ich getan habe:

#define MyAppName "TESTPROG" 
[Setup] 

AppName={#MyAppName} 
DefaultDirName=C:\test\{#MyAppName} 
DefaultGroupName={#MyAppName} 

[Code] 
var 
    Page: TInputDirWizardPage; 
    DataDir: String; 

procedure InitializeWizard; 
begin 
    Page := CreateInputDirPage(wpWelcome, 
    'Select Personal Data Location', 'Where should personal data files be stored?', 
    'Personal data files will be stored in the following folder.'#13#10#13#10 + 
    'To continue, click Next. ' + 
     'If you would like to select a different folder, click Browse.', 
    False, 'New Folder'); 

    Page.Add('Local APP'); 
    Page.Add('Local Storage'); 

    Page.Values[0] := ('C:\My Program'); 
    Page.Values[1] := ('D:\My Program'); 

    DataDir := Page.Values[0]; 
end; 

ich wissen muss, wie und wo ich DefaultDirName Set mit Page.Values[0] und Page.Values[1]

Ich brauche es, weil ein Teil meiner Dateien in einem Ordner sein wird und andere in einem anderen Ordner.

Zum Beispiel:

[Files] 
Source: C:\TEST\DLL1.bat; DestDir: Page.Values[0]\sys1; 
Source: C:\TEST\DLL2.bat; DestDir: Page.Values[1]\sys2; 
+0

*, wo ich DefaultDirName mit Page.Values ​​[0] und Page.Values ​​[1] * festgelegt: Sie legen die Standardwerte bereits im Code: 'Page.Values ​​[0]: = ('C: \ Mein Programm '); '. Fragen Sie tatsächlich, wie Sie das ausgewählte Verzeichnis im Abschnitt 'Files' verwenden können? –

Antwort

2

Verwenden Sie ein scripted constant:

[Files] 
Source: C:\TEST\DLL1.bat; DestDir: "{code:GetDir|0}\sys1" 
Source: C:\TEST\DLL2.bat; DestDir: "{code:GetDir|1}\sys2" 

[Code] 

var 
    Page: TInputDirWizardPage; 

function GetDir(Param: string): string; 
begin 
    Result := Page.Values[StrToInt(Param)]; 
end; 

procedure InitializeWizard; 
begin 
    Page := CreateInputDirPage(...); 
    ... 
end; 

Wenn Sie eine der (ersten) Wege aus der TInputDirWizardPage anstelle des Pfades verwenden möchten von "Select Destination Location" Seite haben Sie drei Optionen.

  1. Deaktivieren Sie die "Select Destination Location" Seite DisableDirPage directive mit:

    DisableDirPage=yes 
    

    Kopieren Sie den Pfad von der TInputDirWizardPage zu dem verborgenen "Wählen Sie Destination Location" Seite, wenn der Benutzer drückt Weiter button:

    var 
        Page: TInputDirWizardPage; 
    
    function InputDirPageNextButtonClick(Sender: TWizardPage): Boolean; 
    begin 
        { Use the first path as the "destination path" } 
        WizardForm.DirEdit.Text := Page.Values[0]; 
        Result := True; 
    end; 
    
    procedure InitializeWizard(); 
    begin 
        Page := CreateInputDirPage(...); 
        ... 
        Page.OnNextButtonClick := @InputDirPageNextButtonClick; 
    end; 
    

    Um das zu ergänzen, können Sie auch die ursprüngliche WizardForm.DirEdit in Ihre benutzerdefinierte Box kopieren. Auf diese Weise stellen Sie sicher, dass 1) bei der Neuinstallation/Aktualisierung der zuvor ausgewählte Wert wiederverwendet wird; 2) /DIR command-line switch funktioniert. Siehe hierzu How to make Inno Setup /DIR command line switch work with custom path page.

  2. Alle Verwendungen des {app} constant durch {code:GetDir|0} ersetzen.

    Make Inno Setup nicht den {app} Pfad CreateAppDir directive mit erstellen:

    CreateAppDir=no 
    

    (dies bedeutet DisableDirPage=yes).

    und haben die Deinstallationsdateien in dem ersten Pfad UninstallFilesDir directive Verwendung gespeichert werden:

    UninstallFilesDir={code:GetDir|0} 
    

    Im Gegensatz zu 1), mit diesem Ansatz des vorherige Installationspfad wird nicht für das spätere Upgrade wiederverwendet erhalten/re-installieren . Um dies zu implementieren, siehe Inno Setup Prompt user for a folder and store the value.

  3. Verwenden Sie das nicht CreateInputDirPage, sondern ein zweites Weg Eingabefeld auf der "Select Destination Location" Seite (SelectDirPage) hinzuzufügen.

+0

Hallo Martin, ich verwendet: [Setup] DefaultDirName = C: \ test \ {# MyAppName} Wie ich DefaultDirName = einstellen {code: GetDir | 0} Grüße – Robertopcn

+0

Wollen Sie damit sagen, dass Sie tun Verwenden Sie nicht die Standard * "Select Destination Location" * -Seite, damit Sie die * "Local APP" * auf Ihrer benutzerdefinierten Seite ersetzen können? Legen Sie die Einstellung "DisableDirPage = yes" fest? –

+0

Ja, genau das. Ich möchte lokale APP verwenden. Ich hatte versucht deaktivieren "DisableDPage = no", aber hat nicht funktioniert. Ich habe auch versucht, DefaultDirName = {code: GetDir | 0}, aber es tritt ein Fehler auf. – Robertopcn

Verwandte Themen