Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

[MCAD.37] Proviamo a fare il setup dalla nostra applicazione Age ?

Nei (numerosi) post precedenti, abbiamo creato pian pianino un'applicazione Age, giusto per verificare passo passo tutte le classi/componenti/funzionalità che ho voluto trattare per prepararmi all'esame. La mia applicazione sul mio PC è funzionante, e mi diverte anche usarla - ho provato ad usarla adesso, e grazie alla stored procedure che abbiamo creato qua, mi dice che il prossimo compleanno è quello di mio papà!

Quello che voglio fare è creare un setup per rendere distribuibile l'applicazione anche in giro, magari per mettere il download sul mio sito o masterizzarlo su CD. La nuova piattaforma .NET ci mette a disposizione lo strumento giusto, cioè un tipo di progetto studiato appositamente per questo tipo di esigenza che, guarda caso, si trova sotto il gruppo Setup and Deployment Projects. Sotto questo gruppo si trovano diversi tipi di progetto. Quello che interessa guardare oggi è quello chiamato Setup Project.

Per organizzare meglio il mio IDE, di solito faccio una cosa. Supponiamo di avere aperto il progetto Age con il sorgente C# scritto nelle settimane precedenti. Adesso che voglio creare il suo setup, non chiudo questo progetto, ma semplicemente aggiungo un nuovo progetto alla soluzione. VS.NET ovviamente non ha problemi a gestire questa situazione: la soluzione comprenderà quindi due progetti separati. Il primo è il progetto all'applicazione, e il secondo è il setup dell'applicazione.

In breve: clicco con il pulsante destro su Solution nel Solution Explorer, vado su Add e seleziono New Project. Dal dialog, seleziono Setup Project, gli do un nome sensato ("SetupMCAD" nel mio caso) e confermo con Ok. L'IDE si aggiorna e mi propone una finestra denominata File System.

Fermiamoci qua un attimo. Prima di proseguire, voglio raccontare le mie esperienze passate parlando di setup & deployment, per far capire i limiti degli strumenti con i quali lavoravo, i problemi che ho (abbiamo) dovuto patire fino ad arrivare a .NET. Magari Michele ed Eleonora , da buoni frequentatori di it.comp.lang.visual-basic, ne sanno qualcosa, chi lo sa?

Un po' di storia, volete?
Ho cominciato a lavorare con Visual Basic 4.0, parecchi anni fa. Ufficialmente, sono stato assunto nel 1995, ma fin da prima programmavo qualcosa con BASIC, GWBASIC, Quick Basic e Visual Basic 4.0 a 32-bit (c'era anche la versione a 16-bit per Windows 3.1). Non mi trovavo male, in fondo la sintassi del BASIC è sempre quella. Solo VB mi ha veramente scombussolato, usciva dai tradizionali schemi della programmazione (imperativa, giusto?) nei quali ero abituato. I primi passi in OOP. Il panico è durato poco: è bastato comprare il mio primo libro su VB per schiarirmi le idee in merito.

All'epoca, 18 anni circa, ero appassionato di GdR (giochi di ruolo). In VB creai un (strampalato, ma mica tanto) programma per creare i personaggi (abilità, statistiche, punteggi vari che non sto qui a precisare, sono OT). Riscosse un enorme successo: ben 5 persone lo apprezzarono, ovvero gli amici con i quali mi trovavo per giocare.
Il 10 Maggio 1998 aprii il mio primo sito Web , sul mitico Geocities, che offriva spazio gratuito, per cui mi domandai: quasi quasi, distribuisco Shankara in giro per il mondo, e vediamo un po' cosa succede. Per chi fosse curioso, il sito Web è online ancora adesso.
Quanto tempo è passato, porca miseria!
Fu in quel periodo che mi imbattei per la prima volta nel Package and Deployment Wizard, disponibile ancora adesso insieme a Visual Basic 6.0.

Non era proprio terribile. Gli si dava in pasto un file VBP (progetto VB) e questo tool creava il setup completo (setup.exe + CABs). Dal progetto, lui deduceva tutte le dipendenze, creava il file setup.ini con tutte le informazioni necessarie per portare avanti fino in fondo il setup. Aveva una serie di difetti, più o meno terribili:

  1. a volte non trovava veramente tutte le dipendenze
  2. a volte nel file setup.ini, i files non venivano riportati nell'ordine corretto (prima di poter installare un file, bisogna installare prima i files da cui dipende)
  3. a volte nel file setup.ini, chissà perchè, i files OCX non venivano marcati dal parametro {DllRegisterServer}, per cui non venivano registrati
  4. l'interfaccia all'inizio andava anche bene, ma poi è diventata veramente vecchia, obsoleta e inquietante
  5. il setup è di una lentezza disarmante
  6. a volte cominciava a fare domande assurde, specialmente quando doveva sovrascrivere files già esistenti. Domande complicate, quasi un rompicapo, con doppie negazioni che rendevano la vita difficile all'utente finale
  7. avete mai provato a distribuire le librerie di Crystal Report con questo tool?
  8. bisognava ricompilare setup1.vbp per personalizzare il nostro setup

Questi, e tutta una serie di altri motivi che ero non ricordo mi hanno fatto un po' impazzire con il buon vecchio Package and Deployment Wizard. Nel corso degli anni, sono passato a Visual Studio Installer, con l'IDE incorporato dentro InterDev. Ci sono stati (e ci sono ancora) un sacco di strumenti come InstallShield, Wise Installer, alcuni addirittura gratuiti, e chi ne ha più ne metta.

Torniamo al nostro Visual Studio
Chiariamo subito una cosa: se usiamo controlli e componenti inclusi nel Framework, le dipendenze non sono più affare nostro. Teoricamente noi potremmo fare il deploy semplicemente con una copia del nostro EXE, e magari qualche altro files (xcopy deployment). La cosa più semplice che possiamo fare con il nostro Setup Project, quindi, è quella di indicare dove posizionare ogni file sul sistema dell'utente finale. L'IDE di VS.NET ci propone all'inizio tre possibili locazioni: Application Folder, User's Desktop e User's Programs Menu.

Il primo folder (Application Folder) è ovviamente la directory di installazione scelta dall'utente, che per default è [ProgramFilesFolder][Manufacturer]\[ProductName].
Negli altri due folders possiamo creare gli shortcuts per facilitare la vita all'utente: per esempio, lo shortcut all'EXE principale della nostra applicazione. Oppure, un link al nostro sito, Oppure, il link per l'uninstall. E così via.

Se volessi aggiungere qualche directory speciale, basta cliccare con il pulsante destro su File System on Target Machine, e dal ContextMenu selezionare la directory che ci serve (font, preferiti, send-to, system, etc.). Notare la comparsa della directory relativa alla GAC, per poter installare assembly in questa locazione. Io personalmente consiglio un bello sguardo alla Property Window ogni volta che cliccate su un elemento: ogni file ha le sue proprietà, come come il nodo Application Folder che ho detto prima. Magari ne parlerò meglio in futuro.

Per generare il vero setup, è sufficiente fare il build del progetto di Setup. Nella directory di output (dove? clic destro sul progetto dal Solution Explorer, poi proprietà) vi ritroverete setup.exe e il file MSI che servono per distribuire l'applicazione agli utenti.

In questo post ci fermiamo qua, ho preferito introdurre il discorso. La prossima volta sarò più conciso e vedremo cosa ci può capitare durante l'esame MCAD.

.NET è meraviglioso
L'accoppiata .NET Framework + IDE di VS.NET è straordinaria.
Per me che arrivo da una decina d'anni di esperienza con il buon vecchio Visual Basic 6.0, vedere cosa sono in grado di fare le classi di .NET è motivo di esaltazione e qualche volta di orgoglio.  Una lacrimuccia mi scende se penso al mio VB6.
Credo che approfondirò il discorso in un altro post che voglio fare, e che esula dalla certificazione MCAD. E' possibile aggiungere launch condition al setup, customizzare in ogni modo quello che il setup deve fare (creare db, andare sul Web, lanciare applicazioni, spedire e-mail), aggiungere finestre di dialogo personalizzate. Strepitoso, suplime!

.NET è meraviglioso, sul serio.
Cito Alejandro, che direbbe:
Fletto i muscoli, ed eredito da System.Configuration.Install.Installer

powered by IMHO 1.2

Print | posted on Friday, September 23, 2005 12:43 PM | Filed Under [ MCAD ]

Feedback

Gravatar

# [MCAD.38] Migliorare il setup con qualche dettaglio in pi

9/23/2005 3:16 PM | Technology Experience
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET