Discussione chiusa
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Discussione: [Inno Setup]Richiesta di più path in un'installazione client/server

  1. #1
    doNascimiento non è in linea Novello
    Post
    49

    [Inno Setup]Richiesta di più path in un'installazione client/server

    Ciao!

    Come si può intuire dal titolo, sto utilizzando Inno Setup per un'installazione client/server. Dovrei installare un'applicazione su un server che condividerà alcuni file con i vari client. Per questo ho bisogno di impostare una directory in cui verrà installata l'applicazione e una directory in cui verranno installati i files condivisi.
    Come faccio quindi, nel processo d'installazione, a chiedere un path per l'applicazione e uno diverso per i dati?

    E una volta capita questa cosa, come faccio a dire al setup che nel caso di installazione lato server, nella directory dei dati ci deve installare determinati files, mentre nell'installazione lato client questi files li deve soltanto leggere?

    Spero di esser stato chiaro....

    Grazie!


  2. #2
    L'avatar di spikexx84
    spikexx84 non è in linea Scribacchino
    Luogo
    Darfo Boario Terme (BS)
    Post
    1,164
    La prossima volta inserisci il link alla discussione di riferimento, stavolta lo faccio io

    Discussione partita qui.

    Ok, qui ci sono due metodi, uno facile e uno un pò più complesso ma più corretto.

    Adesso tu stai proponendo all'utente la scelta del tipo di installazione forzando come componenti i tipi di installazione, ovvero:

    Client, Server non sono componenti dell'installazione, sono TIPI di installazione, da qui si deduce che stai facendo le cose in maniera non corretta (ciò non toglie che funzionano), la maniera corretta sarebbe creare "dal nulla" una nuova pagina di setup in cui inserire la scelta fra Client/Server e la path dei dati, ma stiamo parlando di cose abbastanza avanzate, non voglio mentirti ti devi sbattere per riuscirci. L'alternativa è continuare a usare la pagina dei componenti forzandola e inserire dopo una pagina aggiuntiva di richiesta dir, quest'ultima però è già pronta è più semplice da gestire di quella che dovresti inventare tu.

    Nonostante tutto io ti consiglio la pagina personalizzata, anche perchè così impari come si fanno, ma ti lascio la scelta, dimmi tu
    Se sei nuovo e vuoi aiuto il miglior modo che io ho trovato per ottenerlo è porre le domande in modo intelligente
    Se hai delle domande siamo qui per tentare di risponderti, se hai delle risposte siamo qui per ascoltarle
    Noi siamo una comunità, una bella comunità e funzioniamo sempre meglio se ognuno cerca di seguire al massimo il nostro regolamento

  3. #3
    doNascimiento non è in linea Novello
    Post
    49
    Mi piacerebbe implementare la pagina da zero... Anche se c'è da sbattersi non importa, basta che ho un supporto e lo faccio anche volentieri. Il problema è di tempistiche: se tra l'adozione di una soluzione e l'altra c'è tanta differenza nei tempi di sviluppo, allora purtroppo al momento mi sento costretto a scegliere quella più veloce. Il tempo per imparare il livello avanzato lo troverò sicuramente più avanti...

    Quindi lascio a te la palla... se vuoi dirmi entrambe le soluzioni, così anche altri che magari leggono implementano quale delle due è più adatta al proprio scopo, io sono tutto orecchie... Altrimenti, visto che tu sai la differenza tra una e l'altra soluzione, scegli tu quale delle due spiegarmi in base a quanto ti ho detto (al momento i tempi sono importanti)...

    Grazie!!

  4. #4
    L'avatar di spikexx84
    spikexx84 non è in linea Scribacchino
    Luogo
    Darfo Boario Terme (BS)
    Post
    1,164
    Va bhe, già che sono in ballo balliamo, al massimo ti fornirò codice fatto che puoi studiare poi, allora il concetto è questo: dobbiamo ottenere un valore bulean che ci dica se installare o no i dati, inoltre abbiamo bisogno del percorso di questi dati.

    Ciò significa che ci serve una finestra con due option button Client/Server una textbox per la scrittura del percorso dati e un CommandButtom che avvi una finestra di ricerca cartella per poter selezionare il percorso.

    Ok a questo punto scarica ISFD un pò vecchio ma dovrebbe funzionare ancora e crea la form (io faccio tutto manualmente da codice, ma se hai fretta....),quindi copiaincolla il codice nuovo in InnoSetup e prova se ottieni la form che ci serve.

    Fai qualche prova e dimmi come ti trovi
    Se sei nuovo e vuoi aiuto il miglior modo che io ho trovato per ottenerlo è porre le domande in modo intelligente
    Se hai delle domande siamo qui per tentare di risponderti, se hai delle risposte siamo qui per ascoltarle
    Noi siamo una comunità, una bella comunità e funzioniamo sempre meglio se ognuno cerca di seguire al massimo il nostro regolamento

  5. #5
    doNascimiento non è in linea Novello
    Post
    49
    Carino questo IFSD!! A saper programmare anche i vari form via codice, si può fare veramente di tutto!!

    Bene... ma veniamo a noi... Ho creato la finestra con i due option button (client/server) e la textbox in cui inserire il path dei dati, con il relativo tasto per la scelta della directory...

    Adesso dovremmo impostare da qualche parte in quale punto dell'installazione vorrei mi apparisse la finestra personalizzata (al momento mi viene mostrata all'avvio del setup) e impartire i comandi per salvare le varie impostazioni a seconda delle scelte dell'utente in questa finestra.

    Inoltre, ho creato due frasi (create come TLabel, ma magari il controllo corretto è un altro) che mi piacerebbe apparissero (una delle due) a seconda che si scelga Client oppure Server tra gli option button. Come fare?

  6. #6
    L'avatar di spikexx84
    spikexx84 non è in linea Scribacchino
    Luogo
    Darfo Boario Terme (BS)
    Post
    1,164
    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Adesso dovremmo impostare da qualche parte in quale punto dell'installazione vorrei mi apparisse la finestra personalizzata (al momento mi viene mostrata all'avvio del setup) e impartire i comandi per salvare le varie impostazioni a seconda delle scelte dell'utente in questa finestra.
    Il codice, devo vedere il codice che hai prodotto per poterti indicare dove fare le opportune aggiunte/modifiche

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Inoltre, ho creato due frasi (create come TLabel, ma magari il controllo corretto è un altro) che mi piacerebbe apparissero (una delle due) a seconda che si scelga Client oppure Server tra gli option button. Come fare?
    Si il controllo è giusto, ma come sopra, mi serve di vedere il codice
    Se sei nuovo e vuoi aiuto il miglior modo che io ho trovato per ottenerlo è porre le domande in modo intelligente
    Se hai delle domande siamo qui per tentare di risponderti, se hai delle risposte siamo qui per ascoltarle
    Noi siamo una comunità, una bella comunità e funzioniamo sempre meglio se ognuno cerca di seguire al massimo il nostro regolamento

  7. #7
    doNascimiento non è in linea Novello
    Post
    49
    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    Il codice, devo vedere il codice che hai prodotto per poterti indicare dove fare le opportune aggiunte/modifiche
    Ops.... Scusami.... Eccolo qui:

    codice:
    [Setup]
    AppId={{xxxx-yyyy-zzzz}
    AppName=AppName
    AppVerName=AppName 1.0
    DefaultDirName={pf}\AppName 1.0
    DefaultGroupName=AppName 1.0
    AllowNoIcons=yes
    LicenseFile=license.txt
    OutputBaseFilename=Setup_1.0
    Compression=lzma
    SolidCompression=true
    AppendDefaultDirName=true
    VersionInfoVersion=1.0
    VersionInfoProductName=AppName
    VersionInfoProductVersion=1.0
    AppVersion=1.0
    
    [Languages]
    Name: english; MessagesFile: compiler:Default.isl
    
    [Files]
    Source: File1.mdb; DestDir: {app}; Flags: sharedfile; Components: App_Files
    Source: File2.xls; DestDir: {app}; Flags: sharedfile; Components: App_Files
    Source: File3.xls; DestDir: {app}; Flags: sharedfile; Components: App_Files
    Source: library_1_0.dll; DestDir: {app}; Flags: regserver restartreplace ignoreversion; Components: Core
    Source: RegMWComUtil_silent.bat; DestDir: {app}; Attribs: hidden; Flags: ignoreversion; Components: Core
    Source: VB_DCOM_MDAC_JET_AutoSetup.exe; DestDir: {tmp}; Flags: ignoreversion deleteafterinstall skipifsourcedoesntexist; Components: Core
    Source: dotnetfx3.exe; DestDir: {tmp}; Flags: ignoreversion deleteafterinstall skipifsourcedoesntexist onlyifdoesntexist; Components: NET_Framework
    Source: vcredist_x86.exe; DestDir: {tmp}; Flags: ignoreversion deleteafterinstall skipifsourcedoesntexist; Components: MCR
    Source: MCRInstaller.exe; DestDir: {tmp}; Flags: ignoreversion deleteafterinstall skipifsourcedoesntexist onlyifdoesntexist; Components: MCR
    
    [Icons]
    Name: {group}\File1; Filename: {app}\File1.mdb
    Name: {group}\File2; Filename: {app}\File2.xls
    Name: {group}\File3; Filename: {app}\File3.xls
    Name: {group}\{cm:UninstallProgram,AppName 1.0}; Filename: {uninstallexe}
    
    [Run]
    Filename: {tmp}\VB_DCOM_MDAC_JET_AutoSetup.exe; Parameters: /NORESTART /VERYSILENT; WorkingDir: {tmp}; Flags: skipifdoesntexist
    Filename: {tmp}\dotnetfx3.exe; WorkingDir: {tmp}; Flags: skipifdoesntexist
    Filename: {tmp}\vcredist_x86.exe; Parameters: /NORESTART /VERYSILENT; WorkingDir: {tmp}; Flags: skipifdoesntexist
    Filename: {tmp}\MCRInstaller.exe; WorkingDir: {tmp}; Flags: skipifdoesntexist
    Filename: {app}\RegMWComUtil_silent.bat; Flags: runhidden runascurrentuser
    
    [Components]
    Name: Core; Description: Application Core; Flags: fixed; Types: Full Server Client Custom
    Name: App_Files; Description: Application Files; Types: Full Server
    Name: NET_Framework; Description: .NET Framework 3.0; Types: Full
    Name: MCR; Description: Matlab Component Runtime 7.11; Types: Full Server Client
    
    [Types]
    Name: Full; Description: Full Installation
    Name: Server; Description: Server Installation
    Name: Client; Description: Client Installation
    Name: Custom; Description: Custom Installation; Flags: iscustom
    
    [CustomMessages]
    ClientServer_Caption=Select Installation Type and Data Location
    ClientServer_Description=What type of installation do you want to execute? Where should shared files be installed/located?
    ClientServer_Label1_Caption0=To continue, click Next. If you would like to select a different folder, click Browse.
    ClientServer_Label2_Caption0=Installation Type:
    ClientServer_lbl_server_Caption0=Setup will install data files into the following folder.
    ClientServer_lbl_client_Caption0=Select the server folder containing data files.
    ClientServer_radio_client_Caption0=Client
    ClientServer_radio_server_Caption0=Server
    ClientServer_txt_dataPath_Hint0=Data path on server
    ClientServer_btn_browsePath_Caption0=Browse...
    ClientServer_btn_browsePath_Hint0=Browse for data path on server
    E di seguito la sezione Code:

    codice:
    var
      Label1: TLabel;
      Label2: TLabel;
      lbl_server: TLabel;
      lbl_client: TLabel;
      radio_client: TRadioButton;
      radio_server: TRadioButton;
      txt_dataPath: TEdit;
      btn_browsePath: TButton;
    
    { ClientServer_Activate }
    
    procedure ClientServer_Activate(Page: TWizardPage);
    begin
      // enter code here...
    end;
    
    { ClientServer_ShouldSkipPage }
    
    function ClientServer_ShouldSkipPage(Page: TWizardPage): Boolean;
    begin
      Result := False;
    end;
    
    { ClientServer_BackButtonClick }
    
    function ClientServer_BackButtonClick(Page: TWizardPage): Boolean;
    begin
      Result := True;
    end;
    
    { ClientServer_NextkButtonClick }
    
    function ClientServer_NextButtonClick(Page: TWizardPage): Boolean;
    begin
      Result := True;
    end;
    
    { ClientServer_CancelButtonClick }
    
    procedure ClientServer_CancelButtonClick(Page: TWizardPage; var Cancel, Confirm: Boolean);
    begin
      // enter code here...
    end;
    
    { ClientServer_CreatePage }
    
    function ClientServer_CreatePage(PreviousPageId: Integer): Integer;
    var
      Page: TWizardPage;
    begin
      Page := CreateCustomPage(
        PreviousPageId,
        ExpandConstant('{cm:ClientServer_Caption}'),
        ExpandConstant('{cm:ClientServer_Description}')
      );
    
    { Label1 }
      Label1 := TLabel.Create(Page);
      with Label1 do
      begin
        Parent := Page.Surface;
        Caption := ExpandConstant('{cm:ClientServer_Label1_Caption0}');
        Left := ScaleX(0);
        Top := ScaleY(152);
        Width := ScaleX(390);
        Height := ScaleY(13);
      end;
    
      { Label2 }
      Label2 := TLabel.Create(Page);
      with Label2 do
      begin
        Parent := Page.Surface;
        Caption := ExpandConstant('{cm:ClientServer_Label2_Caption0}');
        Left := ScaleX(0);
        Top := ScaleY(8);
        Width := ScaleX(84);
        Height := ScaleY(13);
      end;
    
      { lbl_server }
      lbl_server := TLabel.Create(Page);
      with lbl_server do
      begin
        Parent := Page.Surface;
        Caption := ExpandConstant('{cm:ClientServer_lbl_server_Caption0}');
        Left := ScaleX(0);
        Top := ScaleY(120);
        Width := ScaleX(242);
        Height := ScaleY(13);
      end;
    
      { lbl_client }
      lbl_client := TLabel.Create(Page);
      with lbl_client do
      begin
        Parent := Page.Surface;
        Caption := ExpandConstant('{cm:ClientServer_lbl_client_Caption0}');
        Left := ScaleX(0);
        Top := ScaleY(120);
        Width := ScaleX(216);
        Height := ScaleY(13);
      end;
    
      { radio_client }
      radio_client := TRadioButton.Create(Page);
      with radio_client do
      begin
        Parent := Page.Surface;
        Caption := ExpandConstant('{cm:ClientServer_radio_client_Caption0}');
        Left := ScaleX(0);
        Top := ScaleY(24);
        Width := ScaleX(73);
        Height := ScaleY(33);
        Checked := True;
        TabOrder := 0;
        TabStop := True;
      end;
    
      { radio_server }
      radio_server := TRadioButton.Create(Page);
      with radio_server do
      begin
        Parent := Page.Surface;
        Caption := ExpandConstant('{cm:ClientServer_radio_server_Caption0}');
        Left := ScaleX(0);
        Top := ScaleY(48);
        Width := ScaleX(73);
        Height := ScaleY(33);
        TabOrder := 1;
      end;
    
      { txt_dataPath }
      txt_dataPath := TEdit.Create(Page);
      with txt_dataPath do
      begin
        Parent := Page.Surface;
        Left := ScaleX(0);
        Top := ScaleY(178);
        Width := ScaleX(337);
        Height := ScaleY(21);
        Hint := ExpandConstant('{cm:ClientServer_txt_dataPath_Hint0}');
        TabOrder := 2;
      end;
    
      { btn_browsePath }
      btn_browsePath := TButton.Create(Page);
      with btn_browsePath do
      begin
        Parent := Page.Surface;
        Caption := ExpandConstant('{cm:ClientServer_btn_browsePath_Caption0}');
        Left := ScaleX(344);
        Top := ScaleY(176);
        Width := ScaleX(65);
        Height := ScaleY(25);
        Hint := ExpandConstant('{cm:ClientServer_btn_browsePath_Hint0}');
        TabOrder := 3;
      end;
    
      with Page do
      begin
        OnActivate := @ClientServer_Activate;
        OnShouldSkipPage := @ClientServer_ShouldSkipPage;
        OnBackButtonClick := @ClientServer_BackButtonClick;
        OnNextButtonClick := @ClientServer_NextButtonClick;
        OnCancelButtonClick := @ClientServer_CancelButtonClick;
      end;
    
      Result := Page.ID;
    end;
    
    { ClientServer_InitializeWizard }
    
    procedure InitializeWizard();
    begin
      ClientServer_CreatePage(wpWelcome);
    end;

  8. #8
    L'avatar di spikexx84
    spikexx84 non è in linea Scribacchino
    Luogo
    Darfo Boario Terme (BS)
    Post
    1,164
    Ok allora per quanto riguarda il posizionamento guarda questa parte di codice

    codice:
    procedure InitializeWizard();
    begin
      ClientServer_CreatePage(wpWelcome);
    end;
    Bene premi F1 e seleziona wpWelcome dall'elenco, apparirà una pagina di spiegazioni sulle event functions, in fondo nella categoria Constants ci sarà quest'elenco

    PageID values for predefined wizard pages
    wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished

    Bene, queste sono tutti gli id delle pagine predefinite dei setup fatti con InnoSetup, devi solo cambiare questo valore e puoi far apparire questa pagina dove vuoi.

    Per il resto abbiamo bisogno di salvare i dati scelti al click sul pulsante avanti quindi dovremo lavorare in questa funzione

    codice:
    function ClientServer_NextButtonClick(Page: TWizardPage): Boolean;
    begin
      Result := True;
    end;
    In più se vuoi far apparire le label in base alla scelta dovremo aggiungere due eventi e creare l'aposita funzione di visibilità che verrà chiamata per rendere visibili/non visibili le label.

    un altra cosa, a meno che tu non abbia intenzione di creare un setup in più lingue non serve usare i custom message, elimina l'intera sezione e sostituisci tutti gli EspandCostant relativi

    Esempio:

    Sostituisci
    Caption := ExpandConstant('{cm:ClientServer_Label1_Caption0}' );
    con
    Caption := 'To continue, click Next. If you would like to select a different folder, click Browse.'

    Fai pulizia anche delle funzioni che non useremo ovvero

    codice:
    { ClientServer_Activate }
    
    procedure ClientServer_Activate(Page: TWizardPage);
    begin
      // enter code here...
    end;
    
    { ClientServer_ShouldSkipPage }
    
    function ClientServer_ShouldSkipPage(Page: TWizardPage): Boolean;
    begin
      Result := False;
    end;
    
    { ClientServer_BackButtonClick }
    
    function ClientServer_BackButtonClick(Page: TWizardPage): Boolean;
    begin
      Result := True;
    end;
    
    { ClientServer_CancelButtonClick }
    
    procedure ClientServer_CancelButtonClick(Page: TWizardPage; var Cancel, Confirm: Boolean);
    begin
      // enter code here...
    end;
    E dei relativi agganci alla pagina, ovvero rimuovile da qui:

    codice:
    with Page do
      begin
        OnActivate := @ClientServer_Activate;
        OnShouldSkipPage := @ClientServer_ShouldSkipPage;
        OnBackButtonClick := @ClientServer_BackButtonClick;
        OnNextButtonClick := @ClientServer_NextButtonClick;
        OnCancelButtonClick := @ClientServer_CancelButtonClick;
      end;
    Ok, così facendo puliremo il codice e dovresti anche iniziare a capire come funziona via codice la creazione delle pagine.
    Se sei nuovo e vuoi aiuto il miglior modo che io ho trovato per ottenerlo è porre le domande in modo intelligente
    Se hai delle domande siamo qui per tentare di risponderti, se hai delle risposte siamo qui per ascoltarle
    Noi siamo una comunità, una bella comunità e funzioniamo sempre meglio se ognuno cerca di seguire al massimo il nostro regolamento

  9. #9
    doNascimiento non è in linea Novello
    Post
    49
    Ecco qui il codice pulito:

    codice:
    var
      Label1: TLabel;
      Label2: TLabel;
      lbl_server: TLabel;
      lbl_client: TLabel;
      radio_client: TRadioButton;
      radio_server: TRadioButton;
      txt_dataPath: TEdit;
      btn_browsePath: TButton;
    
    { ClientServer_NextkButtonClick }
    
    function ClientServer_NextButtonClick(Page: TWizardPage): Boolean;
    begin
      Result := True;
    end;
    
    { ClientServer_CreatePage }
    
    function ClientServer_CreatePage(PreviousPageId: Integer): Integer;
    var
      Page: TWizardPage;
    begin
      Page := CreateCustomPage(
        PreviousPageId,
        'Select Installation Type and Data Location',
        'What type of installation do you want to execute? Where should shared files be installed/located?'
      );
    
    { Label1 }
      Label1 := TLabel.Create(Page);
      with Label1 do
      begin
        Parent := Page.Surface;
        Caption := 'To continue, click Next. If you would like to select a different folder, click Browse.';
        Left := ScaleX(0);
        Top := ScaleY(152);
        Width := ScaleX(390);
        Height := ScaleY(13);
      end;
    
      { Label2 }
      Label2 := TLabel.Create(Page);
      with Label2 do
      begin
        Parent := Page.Surface;
        Caption := 'Installation Type:';
        Left := ScaleX(0);
        Top := ScaleY(8);
        Width := ScaleX(84);
        Height := ScaleY(13);
      end;
    
      { lbl_server }
      lbl_server := TLabel.Create(Page);
      with lbl_server do
      begin
        Parent := Page.Surface;
        Caption := 'Setup will install data files into the following folder.';
        Left := ScaleX(0);
        Top := ScaleY(120);
        Width := ScaleX(242);
        Height := ScaleY(13);
      end;
    
      { lbl_client }
      lbl_client := TLabel.Create(Page);
      with lbl_client do
      begin
        Parent := Page.Surface;
        Caption := 'Select the server folder containing data files.';
        Left := ScaleX(0);
        Top := ScaleY(120);
        Width := ScaleX(216);
        Height := ScaleY(13);
      end;
    
      { radio_client }
      radio_client := TRadioButton.Create(Page);
      with radio_client do
      begin
        Parent := Page.Surface;
        Caption := 'Client';
        Left := ScaleX(0);
        Top := ScaleY(24);
        Width := ScaleX(73);
        Height := ScaleY(33);
        Checked := True;
        TabOrder := 0;
        TabStop := True;
      end;
    
      { radio_server }
      radio_server := TRadioButton.Create(Page);
      with radio_server do
      begin
        Parent := Page.Surface;
        Caption := 'Server';
        Left := ScaleX(0);
        Top := ScaleY(48);
        Width := ScaleX(73);
        Height := ScaleY(33);
        TabOrder := 1;
      end;
    
      { txt_dataPath }
      txt_dataPath := TEdit.Create(Page);
      with txt_dataPath do
      begin
        Parent := Page.Surface;
        Left := ScaleX(0);
        Top := ScaleY(178);
        Width := ScaleX(337);
        Height := ScaleY(21);
        Hint := 'Data path on server';
        TabOrder := 2;
      end;
    
      { btn_browsePath }
      btn_browsePath := TButton.Create(Page);
      with btn_browsePath do
      begin
        Parent := Page.Surface;
        Caption := 'Browse...';
        Left := ScaleX(344);
        Top := ScaleY(176);
        Width := ScaleX(65);
        Height := ScaleY(25);
        Hint := 'Browse for data path on server';
        TabOrder := 3;
      end;
    
      with Page do
      begin
        OnNextButtonClick := @ClientServer_NextButtonClick;
      end;
    
      Result := Page.ID;
    end;
    
    { ClientServer_InitializeWizard }
    
    procedure InitializeWizard();
    begin
      ClientServer_CreatePage(wpSelectDir);
    end;
    Adesso dovrei essere pronto per eseguire le operazioni che hai accennato:

    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    abbiamo bisogno di salvare i dati scelti al click sul pulsante avanti quindi dovremo lavorare in questa funzione

    codice:
    function ClientServer_NextButtonClick(Page: TWizardPage): Boolean;
    begin
      Result := True;
    end;
    In più se vuoi far apparire le label in base alla scelta dovremo aggiungere due eventi e creare l'aposita funzione di visibilità che verrà chiamata per rendere visibili/non visibili le label.
    Attendo istruzioni...

  10. #10
    L'avatar di spikexx84
    spikexx84 non è in linea Scribacchino
    Luogo
    Darfo Boario Terme (BS)
    Post
    1,164
    Ok, ricorda la regola base della scrittura del codice in Inno Setup ovvero se ho bisogno di una funzione o di una procedura all'interno di un'altra funzione o procedura questa DEVE essere scritta sotto.

    Esempio:

    codice:
    funzione1
      begin 
      end;
    
    funzione2
      begin 
        funzione1
      end;
    Se fai le cose al contrario otterai un errore di compilazione difficile da individuare, procedi con cautela.

    Allora iniziamo dichiarando pubbliche a tutta la sezione code le due variabili in cui memorizzeremo i valori che ci servono

    codice:
    [Code]
    Var 
      s_PathDati : string;
      b_InstallaDati : bulean
    Poi creiamo le due funzioni di lettura delle variabili

    codice:
    Function LeggiPathDati(Param: String): String;
      Begin
        Result:= s_PathDati
      End;
    
    Function InstallaDati(): boolean;
      Begin
        Result:= b_InstallaDati
      End;
    Quindi leggiamo questi dati al click avanti nella finestra da noi creata

    codice:
    function ClientServer_NextButtonClick(Page: TWizardPage): Boolean;
    
      Begin
    
        s_PathDati := txt_dataPath.text
        b_InstallaDati := radio_server.Checked
    
        Result := True;
    
      End;
    Ok fatto questo usiamo questi parametri nella sezione file (ti faccio l'esempio su una riga tu fai le altre)

    codice:
    Source: File3.xls; DestDir: "{code:LeggiPathDati}"; Check: InstallaDati;
    Ok una volta finito puoi eliminare completamente la sezione [Components] e la sezione [Type]
    Se sei nuovo e vuoi aiuto il miglior modo che io ho trovato per ottenerlo è porre le domande in modo intelligente
    Se hai delle domande siamo qui per tentare di risponderti, se hai delle risposte siamo qui per ascoltarle
    Noi siamo una comunità, una bella comunità e funzioniamo sempre meglio se ognuno cerca di seguire al massimo il nostro regolamento

Discussione chiusa
Pagina 1 di 2 12 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi