+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 9 su 9

[Inno Setup]Installazione client/server

  1. #1
    Post
    49
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ciao a tutti!

    Sono un newbie della programmazione di setup e ho trovato molto ben fatto il programma Inno Setup, che personalmente utilizzo con il supporto di ISTool. Ho fatto alcune prove e attualmente lo utilizzo con piacere per le mie necessità, ma purtroppo non ho ancora abbastanza conoscenze da creare un setup perfetto, che integri anche un bel pacchetto di disinstallazione.

    In particolare, ultimamente sto cercando di creare un'installazione/disinstallazione client/server. Non so se è corretto il termine client/server, in quanto in realtà l'applicativo verrebbe installato su una macchina (quella che io chiamo "server"), la cui cartella di installazione andrebbe condivisa ai vari "client", che utilizzeranno 3 files in essa contenuti. In pratica, i passi che mi piacerebbe facesse il setup, sono i seguenti:

    - Installare, se non esistente sul pc, il .NET Framework 3.0
    - Installare, se non esistenti sul pc, alcune librerie di Matlab
    - Salvare nella cartella di installazione 3 files di Office
    - Registrare un file di librerie compilate in C++ tramite Matlab
    - Creare un gruppo nel menu Start, al cui interno ci saranno i link ai 3 file di Office e il link al file di disinstallazione

    Tutti i punti sono condivisi tra installazione lato "client" e installazione lato "server", a parte il terzo punto, che va fatto soltanto lato "server" poichè quei 3 files sono i files che andrebbero condivisi ai vari "client".

    Io ho già creato una "cosa" che sembra un'installazione, ma non sono molto soddisfatto del mio elaborato, in quanto non ho raggiunto i risultati sperati. In pratica ho creato un set di 4 installazioni:

    - Full – installa tutto
    - Server – installa tutto meno il .NET Framework (che si presuppone sia già esistente)
    - Client – installa solo le librerie (Matlab + quella compilata personalmente)
    - Custom – permette di selezionare soltanto le opzioni desiderate; il cuore dell'applicazione (registrazione libreria compilata) verrà comunque installato.

    Ora vado a spiegare ciò che non mi piace del mio elaborato:

    1) Ho dovuto creare uno script che, durante l'installazione, mi registri le librerie di Matlab (cosa che, se lancio l'installazione singola delle librerie, non accade poichè le registra automaticamente).
    2) Mi piacerebbe che, se selezionato il file di disinstallazione, mi vengano deregistrate le varie librerie registrate durante il setup e disinstallati soltanto i componenti installati in quella specifica macchina su cui si sceglie la disinstallazione. Questo è un punto importante poiché attualmente le varie installazioni mi sovrascrivono il file di disinstallazione quindi quando vado a selezionare la disinstallazione (da qualsiasi macchina), vengono effettuate le modifiche relative all'ultima installazione effettuata. Questo mi ha anche portato a togliere dal gruppo del menu start l'icona del file di disinstallazione, per limitare i danni di un'eventuale errore di input da parte dell'utente.

    Al momento non mi viene in mente altro... Nel caso abbiate domande per ulteriori chiarimenti o se volete che posti il codice del setup che ho creato, sono a disposizione.

    Grazie per l'attenzione e confido in voi!!

  2. #2
    L'avatar di spikexx84
    spikexx84 non è in linea Scribacchino
    Post
    1,164
    Like Inviati  
    0
    Like Ricevuti  
    0
    Umhhhh, ci sono delle cose che non mi sono chiare.....

    Vediamo di esaminarle:

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    - Installare, se non esistente sul pc, il .NET Framework 3.0
    - Installare, se non esistenti sul pc, alcune librerie di Matlab
    - Salvare nella cartella di installazione 3 files di Office
    - Registrare un file di librerie compilate in C++ tramite Matlab
    - Creare un gruppo nel menu Start, al cui interno ci saranno i link ai 3 file di Office e il link al file di disinstallazione
    Ok, singolarmente questi punti li hai realizzati? Hai problemi a fare una di queste cose? Che vuol dire registrare tramite MatLab?

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Tutti i punti sono condivisi tra installazione lato "client" e installazione lato "server", a parte il terzo punto, che va fatto soltanto lato "server" poichè quei 3 files sono i files che andrebbero condivisi ai vari "client".

    Io ho già creato una "cosa" che sembra un'installazione, ma non sono molto soddisfatto del mio elaborato, in quanto non ho raggiunto i risultati sperati. In pratica ho creato un set di 4 installazioni:

    - Full – installa tutto
    - Server – installa tutto meno il .NET Framework (che si presuppone sia già esistente)
    - Client – installa solo le librerie (Matlab + quella compilata personalmente)
    - Custom – permette di selezionare soltanto le opzioni desiderate; il cuore dell'applicazione (registrazione libreria compilata) verrà comunque installato.
    4 setup diversi? È un errore secondo me, un solo setup che permette di installare in base alle scelte fatte dall'utente (Client/Server) e alle necessità della macchina (c'è il Net FrameWork?)

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    1) Ho dovuto creare uno script che, durante l'installazione, mi registri le librerie di Matlab (cosa che, se lancio l'installazione singola delle librerie, non accade poichè le registra automaticamente).
    Non ho capito assolutamente nulla.... Se lanci l'installazione delle librerie non è automatica....

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    2) Mi piacerebbe che, se selezionato il file di disinstallazione, mi vengano deregistrate le varie librerie registrate durante il setup e disinstallati soltanto i componenti installati in quella specifica macchina su cui si sceglie la disinstallazione. Questo è un punto importante poiché attualmente le varie installazioni mi sovrascrivono il file di disinstallazione quindi quando vado a selezionare la disinstallazione (da qualsiasi macchina), vengono effettuate le modifiche relative all'ultima installazione effettuata. Questo mi ha anche portato a togliere dal gruppo del menu start l'icona del file di disinstallazione, per limitare i danni di un'eventuale errore di input da parte dell'utente.
    Anche qua capito poco, ogni macchina avrà installato una copia del programma con il relativo file unistall che in base al tipo di installazione o con domande all'utente eliminerà quel che deve, cosa lo dovrebbe sovrascrivere?



    Quello che tu stai chiedendo è fattibile, di questo non preoccuparti, ma devi avere le idee chiare e un altra cosa, postare il codice è sempre una buona idea

    Fammi sapere
    ℹ️ Leggi di più su spikexx84 ...

  3. #3
    Post
    49
    Like Inviati  
    0
    Like Ricevuti  
    0
    Dunque... Provo a chiarirti le idee su ciò che non ti è chiaro... E in fondo posto il codice dell'installer (premetto che non ho scritto niente nella sezione [code], cosa che invece forse dovrei fare)...

    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    Ok, singolarmente questi punti li hai realizzati? Hai problemi a fare una di queste cose?
    Questi punti li ho realizzati, ma al momento soltanto come scelte dell'utente; nel senso che alla pagina dove viene scelto il tipo di installazione si sceglie quali componenti installare (tra cui .NET Framework e librerie Matlab); forse c'è un modo, magari tramite la sezione [code], per far capire all'installer se sul pc esistono già queste due componenti... Essendo due requisiti essenziali per l'installazione, in questo modo, qualora non esistessero, li installerebbe silenziosamente senza che l'utente se ne accorga...

    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    Che vuol dire registrare tramite MatLab?
    Devo aver espresso male il concetto... La frase corretta non è "Registrare tramite Matlab" come hai inteso tu... quel "tramite Matlab" è riferito alla compilazione della libreria. In pratica io ho creato una dll tramite Matlab e con questo setup voglio registrare tale libreria (che, a quanto ho capito, si fa specificando il flag "regserver")

    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    4 setup diversi? È un errore secondo me, un solo setup che permette di installare in base alle scelte fatte dall'utente (Client/Server) e alle necessità della macchina (c'è il Net FrameWork?)
    Cosa intendi con 4 setup differenti? Io ho creato 4 tipi di installazioni, che l'utente deve scegliere a seconda della macchina su cui installa. Il setup è unico, le scelte possibili 4.

    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    Non ho capito assolutamente nulla.... Se lanci l'installazione delle librerie non è automatica....
    Mi spiace non averti fatto capire nulla, ma con tutto quello che avevo scritto ho provato a dare per scontate alcune cose che non sono proprie dell'argomento...
    Comunque, per farti capire bene, le librerie di Matlab che vado a integrare nel mio setup, sono in realtà un pacchetto di installazione distribuibile che fornisce MathWorks. Questo pacchetto è già un'installazione a sè stante, io non faccio altro che eseguirlo soltanto nel caso in cui l'utente decida di farlo (in pratica è come il file di installazione del .NET Framework). Il problema è che se questa installazione la lancio da sola, al di fuori del mio setup, le librerie me le registra in automatico, se invece faccio la stessa identica cosa, lanciando però l'installazione dal mio setup, la registrazione non avviene; per questo ho creato uno script che esegua questa operazione al termine del setup. Spero di essere stato più chiaro...
    Comunque questa è una piccolezza che volevo soltanto accennare, se è complicato tengo la soluzione che ho adottato finora.

    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    Anche qua capito poco, ogni macchina avrà installato una copia del programma con il relativo file unistall che in base al tipo di installazione o con domande all'utente eliminerà quel che deve, cosa lo dovrebbe sovrascrivere?
    Ecco, questo è il punto su cui ho più problemi...
    Io installo prima sul "server", poi condivido la cartella di installazione e lancio il setup dai vari "client", scegliendo su ciascuno di essi, come cartella di installazione, la cartella condivisa. In questo modo il file di disinstallazione viene sovrascritto ogni volta.
    Sicuramente sbaglio e non so come si possa fare diversamente. Per questo chiedo aiuto a te, anche perchè non so proprio come creare un processo di disinstallazione.


    Di seguito posto il codice del setup:

    [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; 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; 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
    

  4. #4
    L'avatar di spikexx84
    spikexx84 non è in linea Scribacchino
    Post
    1,164
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ma ma ma ma, ieri ti avevo risposto e oggi non vedo più il mio messaggio....

    Va bhe lo riscrivo

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Questi punti li ho realizzati, ma al momento soltanto come scelte dell'utente; nel senso che alla pagina dove viene scelto il tipo di installazione si sceglie quali componenti installare (tra cui .NET Framework e librerie Matlab); forse c'è un modo, magari tramite la sezione [code], per far capire all'installer se sul pc esistono già queste due componenti... Essendo due requisiti essenziali per l'installazione, in questo modo, qualora non esistessero, li installerebbe silenziosamente senza che l'utente se ne accorga...
    Ok per fare questo è necessario capire come accorgersi che il netframework e le librerie di matlab sono già presenti sul pc, per il netframework è sufficente controllare che la chiave

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Install

    Esista e valga 1, mentre per il malab non saprei (non lo conosco), alla meno peggio è sufficente cercare una dll che installa leggerne una versione e controllare

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Devo aver espresso male il concetto... La frase corretta non è "Registrare tramite Matlab" come hai inteso tu... quel "tramite Matlab" è riferito alla compilazione della libreria. In pratica io ho creato una dll tramite Matlab e con questo setup voglio registrare tale libreria (che, a quanto ho capito, si fa specificando il flag "regserver")
    Se è una dll com (che quindi necessita registrazione) si si fa con regserver

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Cosa intendi con 4 setup differenti? Io ho creato 4 tipi di installazioni, che l'utente deve scegliere a seconda della macchina su cui installa. Il setup è unico, le scelte possibili 4.
    Ok, quasi giusto, perchè secondo me le scelte son solo due, client o server, ma ci arriveremo

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Mi spiace non averti fatto capire nulla, ma con tutto quello che avevo scritto ho provato a dare per scontate alcune cose che non sono proprie dell'argomento...
    Comunque, per farti capire bene, le librerie di Matlab che vado a integrare nel mio setup, sono in realtà un pacchetto di installazione distribuibile che fornisce MathWorks. Questo pacchetto è già un'installazione a sè stante, io non faccio altro che eseguirlo soltanto nel caso in cui l'utente decida di farlo (in pratica è come il file di installazione del .NET Framework). Il problema è che se questa installazione la lancio da sola, al di fuori del mio setup, le librerie me le registra in automatico, se invece faccio la stessa identica cosa, lanciando però l'installazione dal mio setup, la registrazione non avviene; per questo ho creato uno script che esegua questa operazione al termine del setup. Spero di essere stato più chiaro...
    Comunque questa è una piccolezza che volevo soltanto accennare, se è complicato tengo la soluzione che ho adottato finora.
    No. qui c'è qualcosa che non va, Inno Setup si limita a eseguire un exe, quindi che tu lo faccia dalla sezione run e che lo lanci manualmente da qualsiasi altra parte anche esterna al setup non cambia assolutamente nulla, riprova, ci deve essere qualcosa che ti è sfuggito

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Ecco, questo è il punto su cui ho più problemi...
    Io installo prima sul "server", poi condivido la cartella di installazione e lancio il setup dai vari "client", scegliendo su ciascuno di essi, come cartella di installazione, la cartella condivisa. In questo modo il file di disinstallazione viene sovrascritto ogni volta.
    Sicuramente sbaglio e non so come si possa fare diversamente. Per questo chiedo aiuto a te, anche perchè non so proprio come creare un processo di disinstallazione.
    Aspetta, dal codice del tuo setup io noto che tu installi nella cartella App 3 file xls, un mdb e una dll, mi spieghi dov'è l'exe? E la cartella App cos'è? Quella condivisa sul server? In sostanza tu sovrascrivi i file di dati ad ogni installazione?
    ℹ️ Leggi di più su spikexx84 ...

  5. #5
    Post
    49
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    Ok per fare questo è necessario capire come accorgersi che il netframework e le librerie di matlab sono già presenti sul pc, per il netframework è sufficente controllare che la chiave

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Install

    Esista e valga 1
    Per controllare il valore della chiave di registro devo utilizzare la sezione [code]? Mi potresti fare un piccolo esempio di un suo utilizzo per questo scopo?

    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    mentre per il malab non saprei (non lo conosco), alla meno peggio è sufficente cercare una dll che installa leggerne una versione e controllare
    Per questo punto farò qualche tentativo con la libreria che registro manualmente al termine del setup, però mi dovresti accennare qualcosa sulla ricerca di chiavi all’interno del registro di sistema (va bene anche l’indicazione di eventuali risorse online o documentazione varia).

    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    Ok, quasi giusto, perchè secondo me le scelte son solo due, client o server, ma ci arriveremo
    Effettivamente le scelte principali sono le due che dici; le altre due sono quella personalizzata e quella completa (chiamiamole scelte “opzionali”).

    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    No. qui c'è qualcosa che non va, Inno Setup si limita a eseguire un exe, quindi che tu lo faccia dalla sezione run e che lo lanci manualmente da qualsiasi altra parte anche esterna al setup non cambia assolutamente nulla, riprova, ci deve essere qualcosa che ti è sfuggito
    Infatti è una cosa di cui non mi capacito... Chiedevo consiglio a te apposta perchè magari ti veniva in mente qualcosa... Pazienza, a questo poi ci penserò, tanto è il meno...

    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    Aspetta, dal codice del tuo setup io noto che tu installi nella cartella App 3 file xls, un mdb e una dll, mi spieghi dov'è l'exe?
    Eh... Infatti questo setup non installa un vero e proprio applicativo, il file eseguibile non esiste... Si limita invece a installare 2 files xls, 1 mdb e registrare la dll. L’applicativo in sostanza consiste nell’utilizzo di questi 3 files.

    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    E la cartella App cos'è? Quella condivisa sul server? In sostanza tu sovrascrivi i file di dati ad ogni installazione?
    La cartella App è proprio quella condivisa sul server. In pratica le mie installazioni avvengono sempre in quella cartella e proprio per questo il file di disinstallazione viene sempre sovrascritto tenendo traccia soltanto dell’ultima installazione.
    Nota: tralasciando un momento il fatto che con molte probabilità sto sbagliando l’approccio, considera comunque che i 3 files di Office vengono installati soltanto quando si sceglie l’installazione server, infatti nell’installazione client, vengono registrate soltanto le librerie, come puoi notare dal codice seguente:
    Source: library_1_0.dll; DestDir: {app}; Flags: regserver restartreplace ignoreversion; Components: Core
    
    (questa è la libreria necessaria per l’utilizzo di uno dei due files excel)
    Source: RegMWComUtil_silent.bat; DestDir: {app}; Attribs: hidden; Flags: ignoreversion; Components: Core
    
    (questo è lo script che lancio per registrare le librerie di Matlab)
    Source: VB_DCOM_MDAC_JET_AutoSetup.exe; DestDir: {tmp}; Flags: ignoreversion deleteafterinstall; Components: Core
    
    (questo l’ho preso da uno dei tuoi tutorial, che male non fa...)

    In pratica i files di Office non vengono mai sovrascritti se non si sceglie l'installazione lato server (che di norma dovrebbe essere soltanto una )

    Chissà quanti errori sto commettendo... Ti chiedo scusa per la marea di informazioni che ti sto chiedendo...

  6. #6
    L'avatar di spikexx84
    spikexx84 non è in linea Scribacchino
    Post
    1,164
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Per controllare il valore della chiave di registro devo utilizzare la sezione [code]? Mi potresti fare un piccolo esempio di un suo utilizzo per questo scopo?
    Allora qui spiego come fare interagire la sezione code con il setup e per leggere nel registro di sistema puoi usare:RegValueExists per controllare se il valore esiste e RegQueryDWordValue per leggerlo (dettagli nella guida di InnoSetup).

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Effettivamente le scelte principali sono le due che dici; le altre due sono quella personalizzata e quella completa (chiamiamole scelte “opzionali”).
    Cosa installa quella completa? Cosa si può o meno decidere di installare in quella personalizzata?

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Infatti è una cosa di cui non mi capacito... Chiedevo consiglio a te apposta perchè magari ti veniva in mente qualcosa... Pazienza, a questo poi ci penserò, tanto è il meno...
    Saltiamolo allora per adesso

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Eh... Infatti questo setup non installa un vero e proprio applicativo, il file eseguibile non esiste... Si limita invece a installare 2 files xls, 1 mdb e registrare la dll. L’applicativo in sostanza consiste nell’utilizzo di questi 3 files.
    Umhh... e al db come ci accedi? È necessario Access? Dai per scontato che sia installato? Stesso discorso per i file xls?

    Allora vediamo di capirci, dò per scontato che i "client" con cui tu leggi questi dati sul server sono Exel e Access, questi programmi risiedono ovviamente sui computer client (non è che usi quello del server per capirci), questi documenti necessitano però anche di una dll che viene registrata solo sul server, il che significa che i computer client non riusciranno a usarla perchè non hanno nel registro di sistema i dati della dll.
    In teoria ogni Client dovrebbe avere la sua bella dll installata sul suo pc, o meglio 9 client e 1 server = 10 copie della dll....

    Se mi confermi questo possiamo andare avanti.

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    La cartella App è proprio quella condivisa sul server. In pratica le mie installazioni avvengono sempre in quella cartella e proprio per questo il file di disinstallazione viene sempre sovrascritto tenendo traccia soltanto dell’ultima installazione.
    Nota: tralasciando un momento il fatto che con molte probabilità sto sbagliando l’approccio, considera comunque che i 3 files di Office vengono installati soltanto quando si sceglie l’installazione server, infatti nell’installazione client, vengono registrate soltanto le librerie, come puoi notare dal codice seguente:
    Source: library_1_0.dll; DestDir: {app}; Flags: regserver restartreplace ignoreversion; Components: Core
    
    (questa è la libreria necessaria per l’utilizzo di uno dei due files excel)
    Source: RegMWComUtil_silent.bat; DestDir: {app}; Attribs: hidden; Flags: ignoreversion; Components: Core
    
    (questo è lo script che lancio per registrare le librerie di Matlab)
    Source: VB_DCOM_MDAC_JET_AutoSetup.exe; DestDir: {tmp}; Flags: ignoreversion deleteafterinstall; Components: Core
    
    (questo l’ho preso da uno dei tuoi tutorial, che male non fa...)

    In pratica i files di Office non vengono mai sovrascritti se non si sceglie l'installazione lato server (che di norma dovrebbe essere soltanto una )
    La cartella App NON è la cartella dei dati, approccio sbagliato in effetti, nella cartella App se mai ci va solo la dll e la path dei dati sul server va chiesta a parte e questo risolve anche il "problema" dell'unistall che non verrà assolutamente più sovrascritto perchè ne andrà uno per ogni pc come è giusto che sia.

    Ci stiamo allargando troppo comunque, facciamo così, in questa discussione vediamo di capire cosa vuoi fare come devi farlo, poi per ogni quesito apri una discussione, se no chi può aver bisogno delle stesse cose in futuro non le trova...

    Esempio:

    Quote Originariamente inviato da Dicussione1
    Come faccio a installare il NetFrameWork solo se questo non è già presente?
    Quote Originariamente inviato da Dicussione2
    Come faccio a non far disinstallare i dati server alle installazioni client?
    Eccetera.....
    ℹ️ Leggi di più su spikexx84 ...

  7. #7
    Post
    49
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    Allora qui spiego come fare interagire la sezione code con il setup e per leggere nel registro di sistema puoi usare:RegValueExists per controllare se il valore esiste e RegQueryDWordValue per leggerlo (dettagli nella guida di InnoSetup).
    Ok grazie, proverò a fare alcuni test sia per dotnetframework, sia per le librerie matlab...

    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    Cosa installa quella completa? Cosa si può o meno decidere di installare in quella personalizzata?
    Con l’installazione completa si installano i files Office, la dll, l’MCR (librerie matlab), il Framework .NET e lo script per registrare le librerie matlab. Con l’installazione personalizzata è possibile escludere ciascuna di queste componenti, a parte la dll e la registrazione delle librerie matlab (che rimangono fisse per ogni installazione).
    Ovviamente, se dovessi riuscire a gestire l’installazione del framework e dell’MCR via codice, il setup si ridurrebbe alla sola scelta tra client e server (niente più full né custom installations...)

    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    Umhh... e al db come ci accedi? È necessario Access? Dai per scontato che sia installato? Stesso discorso per i file xls?
    Al database ci accedo appunto tramite Access, oppure tramite una macro da uno dei due fogli excel.
    Essendo a diretto contatto con l’utente finale, so che Access ed Excel sono già installati, però mi stai dando uno spunto per un eventuale nuovo utente. Se riesci a dirmi quali chiavi di registro controllare per sapere se Access ed Excel sono installati, allora potrei sfruttare la sezione code anche per questa verifica.

    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    Allora vediamo di capirci, dò per scontato che i "client" con cui tu leggi questi dati sul server sono Exel e Access, questi programmi risiedono ovviamente sui computer client (non è che usi quello del server per capirci), questi documenti necessitano però anche di una dll che viene registrata solo sul server, il che significa che i computer client non riusciranno a usarla perchè non hanno nel registro di sistema i dati della dll.
    In teoria ogni Client dovrebbe avere la sua bella dll installata sul suo pc, o meglio 9 client e 1 server = 10 copie della dll....
    Non so che dire.... Sei semplicemente un grande per aver capito tutto ciò senza avertelo enunciato!! E’ per il motivo che tu dici che io vado a registrare la dll sia sul server, sia su tutti i client... E questo vale anche per le librerie di matlab (anche queste necessariamente residenti su ciascuna macchina).

    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    Se mi confermi questo possiamo andare avanti.
    Allora direi che possiamo andare avanti!!

    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    La cartella App NON è la cartella dei dati, approccio sbagliato in effetti, nella cartella App se mai ci va solo la dll e la path dei dati sul server va chiesta a parte e questo risolve anche il "problema" dell'unistall che non verrà assolutamente più sovrascritto perchè ne andrà uno per ogni pc come è giusto che sia.
    Capisco... Ma come faccio a chiedere un path per l’applicazione e uno per i dati?

    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    Ci stiamo allargando troppo comunque, facciamo così, in questa discussione vediamo di capire cosa vuoi fare come devi farlo, poi per ogni quesito apri una discussione, se no chi può aver bisogno delle stesse cose in futuro non le trova...
    Hai ragione, sorry... Allora se dalla prossima risposta ho domande che potrebbero esser trattate singolarmente, aprirò un nuovo thread con la richiesta. Anzi, lo faccio già adesso con la richiesta che ti ho fatto qui sopra...

  8. #8
    L'avatar di spikexx84
    spikexx84 non è in linea Scribacchino
    Post
    1,164
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Con l’installazione completa si installano i files Office, la dll, l’MCR (librerie matlab), il Framework .NET e lo script per registrare le librerie matlab. Con l’installazione personalizzata è possibile escludere ciascuna di queste componenti, a parte la dll e la registrazione delle librerie matlab (che rimangono fisse per ogni installazione).
    Ovviamente, se dovessi riuscire a gestire l’installazione del framework e dell’MCR via codice, il setup si ridurrebbe alla sola scelta tra client e server (niente più full né custom installations...)
    Bene, infatti è a questo che bisogna puntare, l'utente nella maggior parte dei casi non è in grado di capire se la sua macchina necessità o no dell'installazione del net framework o dell'engine di matlab (dovrai anche considerare che se davvero hai bisogno del netframework 3 dovrai inserire come recquisito minimo win xp, perchè per win 2000 il netframework 3 non esiste)

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Al database ci accedo appunto tramite Access, oppure tramite una macro da uno dei due fogli excel.
    Essendo a diretto contatto con l’utente finale, so che Access ed Excel sono già installati, però mi stai dando uno spunto per un eventuale nuovo utente. Se riesci a dirmi quali chiavi di registro controllare per sapere se Access ed Excel sono installati, allora potrei sfruttare la sezione code anche per questa verifica.
    Questo postalo in un altra discussione

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Non so che dire.... Sei semplicemente un grande per aver capito tutto ciò senza avertelo enunciato!! E’ per il motivo che tu dici che io vado a registrare la dll sia sul server, sia su tutti i client... E questo vale anche per le librerie di matlab (anche queste necessariamente residenti su ciascuna macchina).
    Ok, ma questo non vale per le librerie di matlab dal momento che li lanci un exe, il problema in questo caso è un altro, ma non sò quale perchè non ho mai visto ne usato quel setup.

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Capisco... Ma come faccio a chiedere un path per l’applicazione e uno per i dati?
    Anche qui ci vuole un post aposito

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Hai ragione, sorry... Allora se dalla prossima risposta ho domande che potrebbero esser trattate singolarmente, aprirò un nuovo thread con la richiesta. Anzi, lo faccio già adesso con la richiesta che ti ho fatto qui sopra...
    Ok vado a rispondere anche li
    ℹ️ Leggi di più su spikexx84 ...

  9. #9
    Post
    49
    Like Inviati  
    0
    Like Ricevuti  
    0
    Grazie all'aiuto di spikexx84, sono riuscito ad arrivare ad una soluzione, creando un'installazione client/server pulita ed essenziale. Riporto di seguito, per chi avesse bisogno di qualche spunto, il codice del mio elaborato, al quale sono arrivato insieme a spikexx84 e con l'ausilio dell'help di InnoSetup (per i dettagli leggete, oltre ai post della presente discussione, anche i punti descritti nelle due discussioni "[Inno Setup] Richiesta di più path in un'installazione client/server" e "[Inno Setup] Controllare l'esistenza o i valori delle chiavi di registro").

    Grazie ancora di tutto spikexx84!! Saper utilizzare questo bel programma qual è InnoSetup, deve dare tante soddisfazioni!!

    Ecco di seguito il codice (tenete conto che sono un programmatore novizio di InnoSetup, perciò dovessero esserci errori o metodi migliori per fare qualcosa, scusatemi in anticipo).

    [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: {code:LeggiPathDati}; Check: InstallaDati
    Source: File2.xls; DestDir: {code:LeggiPathDati}; Check: InstallaDati
    Source: File3.xls; DestDir: {code:LeggiPathDati}; Check: InstallaDati
    Source: library_1_0.dll; DestDir: {app}; Flags: regserver restartreplace ignoreversion
    Source: RegMWComUtil_silent.bat; DestDir: {app}; Attribs: hidden; Flags: ignoreversion; Check: InstallaMCR
    Source: VB_DCOM_MDAC_JET_AutoSetup.exe; DestDir: {tmp}; Flags: ignoreversion deleteafterinstall skipifsourcedoesntexist
    Source: dotnetfx3.exe; DestDir: {tmp}; Flags: ignoreversion deleteafterinstall skipifsourcedoesntexist onlyifdoesntexist; Check: InstallaDotNetFramework
    Source: vcredist_x86.exe; DestDir: {tmp}; Flags: ignoreversion deleteafterinstall skipifsourcedoesntexist; Check: InstallaMCR
    Source: MCRInstaller.exe; DestDir: {tmp}; Flags: ignoreversion deleteafterinstall skipifsourcedoesntexist onlyifdoesntexist; Check: InstallaMCR
    
    [Icons]
    Name: {group}\File1; Filename: {code:LeggiPathDati}\File1.mdb
    Name: {group}\File2; Filename: {code:LeggiPathDati}\File2.xls
    Name: {group}\File3; Filename: {code:LeggiPathDati}\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; Check: InstallaDotNetFramework
    Filename: {tmp}\vcredist_x86.exe; Parameters: /NORESTART /VERYSILENT; WorkingDir: {tmp}; Flags: skipifdoesntexist; Check: InstallaMCR
    Filename: {tmp}\MCRInstaller.exe; WorkingDir: {tmp}; Flags: skipifdoesntexist; Check: InstallaMCR
    Filename: {app}\RegMWComUtil_silent.bat; Flags: runhidden runascurrentuser; Check: InstallaMCR
    
    Di seguito il testo da inserire nella sezione [code]:

    var
      DotNetChecked: Boolean;
      MCRChecked: Boolean;
      b_InstallaMCR: Boolean;
      b_InstallaDotNet: Boolean;
      DWord: Cardinal;
    
    function InstallaDotNetFramework: Boolean;
    begin
        if Not DotNetChecked then
        begin
          if (RegQueryDWordValue(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0','Install',DWord) And (DWord = 1)) Or (RegQueryDWordValue(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5','Install',DWord) And (DWord = 1)) then
          begin
            b_InstallaDotNet := False;
          end
          else
          begin
            b_InstallaDotNet := MsgBox('Setup has detected that .NET Framework 3.0 is not installed on this workstation. Without it some application components will not work properly. It is suggested to install it. Do you want to install .NET Framework 3.0?', mbConfirmation, MB_YESNO) = idYes;
          end;
          DotNetChecked := True;
        end;
        Result := b_InstallaDotNet;
    end;
    
    function InstallaMCR: Boolean;
    begin
        if Not MCRChecked then
        begin
          if RegKeyExists(HKEY_LOCAL_MACHINE,'SOFTWARE\MATLAB\MCRPathDir') then
          begin
            b_InstallaMCR := False
          end
          else
          begin
            b_InstallaMCR := MsgBox('Setup has detected that Matlab Component Runtime 7.11 is not installed on this workstation. Without it some application components will not work properly. It is suggested to install it. Do you want to install Matlab Component Runtime 7.11?', mbConfirmation, MB_YESNO) = idYes;
          end;
          MCRChecked := True;
        end;
        Result := b_InstallaMCR;
    end;
    
    function Excel2003Installato: Boolean;
    begin
        if RegKeyExists(HKEY_LOCAL_MACHINE,'Software\Microsoft\Office\11.0\Excel') Or RegKeyExists(HKEY_LOCAL_MACHINE,'Software\Microsoft\Office\12.0\Excel') then
        begin
          Result := True;
        end
        else
        begin
          Result := False;
        end;
    end;
    
    function Access2003Installato: Boolean;
    begin
        if RegKeyExists(HKEY_LOCAL_MACHINE,'Software\Microsoft\Office\11.0\Access') Or RegKeyExists(HKEY_LOCAL_MACHINE,'Software\Microsoft\Office\12.0\Access') then
        begin
          Result := True;
        end
        else
        begin
          Result := False;
        end;
    end;
    
    function InitializeSetup: Boolean;
    var
      Version: TWindowsVersion;
      S: String;
    begin
      GetWindowsVersionEx(Version);
    
      // On Windows XP, check for SP3
      if Version.NTPlatform and
         (Version.Major = 5) and
         (Version.Minor = 1) and
         (Version.ServicePackMajor < 3) then
      begin
        SuppressibleMsgBox('When running on Windows XP, Service Pack 3 is required.',
          mbCriticalError, MB_OK, MB_OK);
        Result := False;
        Exit;
      end;
    
      // Check for Microsoft Excel
      if Excel2003Installato = False then
      begin
        SuppressibleMsgBox('Microsoft Excel 2003/2007 is required for application execution.',
          mbCriticalError, MB_OK, MB_OK);
        Result := False;
        Exit;
      end;
    
      // Check for Microsoft Access
      if Access2003Installato = False then
      begin
        SuppressibleMsgBox('Microsoft Access 2003/2007 is required for application execution.',
          mbCriticalError, MB_OK, MB_OK);
        Result := False;
        Exit;
      end;
    
      // Check for .NET Framework
      InstallaDotNetFramework;
    
      // Check for MCR
      InstallaMCR;
    
      Result := True;
    end;
    
    var
      s_PathDati : string;
      b_InstallaDati : boolean;
    
    function LeggiPathDati(Param: String): String;
    begin
      Result:= s_PathDati;
    end;
    
    function InstallaDati(): boolean;
    begin
      Result:= b_InstallaDati;
    end;
    
    var
      Label1: TLabel;
      Label2: TLabel;
      lbl_description: TLabel;
      lbl_folder: TLabel;
      radio_local: TRadioButton;
      radio_client: TRadioButton;
      radio_server: TRadioButton;
      txt_dataPath: TEdit;
      btn_browsePath: TButton;
    
    procedure InstallazioneLocal_Click(Sender: TObject);
    begin
      lbl_description.Caption := 'Choose this installation type if you will use the application only from this workstation.'
      lbl_folder.Caption := 'Setup will install data files into the following local folder.';
    end;
    
    procedure InstallazioneClient_Click(Sender: TObject);
    begin
      lbl_description.Caption := 'Choose this installation type if you are installing the application on a client of a network.'
      lbl_folder.Caption := 'Select shared folder containing data files.';
    end;
    
    procedure InstallazioneServer_Click(Sender: TObject);
    begin
      lbl_description.Caption := 'Choose this installation type if you are installing the application on a server and you want to share it with clients.'
      lbl_folder.Caption := 'Setup will install data files into the following shared folder.';
    end;
    
    var
      Directory: String;
    
    procedure Sfoglia_Click(Sender: TObject);
    begin
      if BrowseForFolder('Select shared folder.', Directory, True) then
      begin
        txt_dataPath.text := Directory
      end;
    end;
    
    { ClientServer_NextkButtonClick }
    
    function ClientServer_NextButtonClick(Page: TWizardPage): Boolean;
    begin
      if radio_local.Checked then
      begin
        s_PathDati := txt_dataPath.text
        b_InstallaDati := True
      end
      else if radio_server.Checked then
      begin
        s_PathDati := txt_dataPath.text
        b_InstallaDati := True
      end
      else
      begin
        b_InstallaDati := False
      end;
    
      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 data files be installed/located?'
      );
    
      { Label1 }
      Label1 := TLabel.Create(Page);
      with Label1 do
      begin
        Parent := Page.Surface;
        Caption := 'Installation Type:';
        Left := ScaleX(0);
        Top := ScaleY(8);
        Width := ScaleX(84);
        Height := ScaleY(13);
      end;
    
      { Label2 }
      Label2 := TLabel.Create(Page);
      with Label2 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;
    
      { lbl_description }
      lbl_description := TLabel.Create(Page);
      with lbl_description do
      begin
        Parent := Page.Surface;
        Caption := 'Choose this installation type if you will use the application only from this workstation.';
        Left := ScaleX(192);
        Top := ScaleY(32);
        Width := ScaleX(202);
        Height := ScaleY(61);
        WordWrap := True;
      end;
    
      { lbl_folder }
      lbl_folder := TLabel.Create(Page);
      with lbl_folder do
      begin
        Parent := Page.Surface;
        Caption := 'Setup will install data files into the following local folder.';
        Left := ScaleX(0);
        Top := ScaleY(128);
        Width := ScaleX(290);
        Height := ScaleY(13);
      end;
    
      { radio_local }
      radio_local := TRadioButton.Create(Page);
      with radio_local do
      begin
        Parent := Page.Surface;
        Caption := 'Local';
        Left := ScaleX(0);
        Top := ScaleY(24);
        Width := ScaleX(73);
        Height := ScaleY(33);
        Checked := True;
        TabOrder := 0;
        TabStop := True;
        OnClick := @InstallazioneLocal_Click;
      end;
    
      { radio_client }
      radio_client := TRadioButton.Create(Page);
      with radio_client do
      begin
        Parent := Page.Surface;
        Caption := 'Client';
        Left := ScaleX(0);
        Top := ScaleY(48);
        Width := ScaleX(73);
        Height := ScaleY(33);
        Checked := False;
        TabOrder := 1;
        OnClick := @InstallazioneClient_Click;
      end;
    
      { radio_server }
      radio_server := TRadioButton.Create(Page);
      with radio_server do
      begin
        Parent := Page.Surface;
        Caption := 'Server';
        Left := ScaleX(0);
        Top := ScaleY(72);
        Width := ScaleX(73);
        Height := ScaleY(33);
        TabOrder := 2;
        OnClick := @InstallazioneServer_Click;
      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);
        TabOrder := 3;
        Text := ExpandConstant('{commondocs}\AppName Data')
      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);
        TabOrder := 4;
        OnClick := @Sfoglia_Click
      end;
    
      with Page do
      begin
        OnNextButtonClick := @ClientServer_NextButtonClick;
      end;
    
      Result := Page.ID;
    end;
    
    { ClientServer_InitializeWizard }
    
    procedure InitializeWizard();
    begin
      ClientServer_CreatePage(wpSelectDir);
    end;
    
    Ciao a tutti!!

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. [Inno Setup]Richiesta di più path in un'installazione client/server
    Da doNascimiento nel forum Altri linguaggi e strumenti
    Risposte: 18
    Ultimo Post: 08-11-2013, 14:18
  2. [Inno Setup] Inserire nel setup uno script di installazione di altri software
    Da Albaz_mat nel forum Altri linguaggi e strumenti
    Risposte: 0
    Ultimo Post: 21-10-2011, 09:36
  3. Inno setup - Installazione dll
    Da wais87 nel forum Altri linguaggi e strumenti
    Risposte: 2
    Ultimo Post: 14-11-2010, 17:06
  4. Installazione client/server lato client - Permessi di amministrazione
    Da doNascimiento nel forum Altri linguaggi e strumenti
    Risposte: 5
    Ultimo Post: 18-01-2010, 16:29
  5. Articolo: [Inno Setup]Installazione OCX e DLL
    Da spikexx84 nel forum Altri linguaggi e strumenti
    Risposte: 0
    Ultimo Post: 13-05-2009, 11:36