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.39] Scrivere nel registro durante il nostro setup

Nel mio ultimo post [MCAD.38] abbiamo parlato delle Launch Conditions. Come ho detto, si tratta di condizioni che devono essere soddisfatte affinchè il setup possa procedere regolarmente. Concettualmente, possiamo attivare una Launch Condition secondo 3 modalità: il valore di una chiave nel registry, la presenza di un file sul FS dell'utente finale e la presenza di un componente COM installato tramite MSI. Queste 3 modalità attivano o meno la condition, che fa apparire un messaggio all'utente comunicandogli l'impossibilità di installare l'applicazione. Opzionalmente, possiamo indicare anche un URL, che l'utente può visitare per avere maggiori informazioni.

Le possibilità offerte dal Setup Project di VS.NET non finiscono qua. E ci mancherebbe!

Scrivere nel registro chiavi e valori in modo dinamico
Chiariamo una piccola cosa. Attraverso Visual Installer (gratuito) già da un po' di tempo c'è la possibilità di creare nuove chiavi/valori dentro il registry. E' sufficiente usare una sorta di Registry Editor (immaginatelo un po' come il regedit) ed indicare la chiave da creare, con tutti i valori che vogliamo scrivere al termine del setup - ovviamente, se tutto va a buon fine.

Dov'è allora che .NET fa un passo avanti? Con questo tipo di progetto possiamo creare chiavi e valori in modo dinamico, ovvero il cui nome e/o valore è deciso dall'utente durante il setup stesso. Facciamo un piccolo esempio: possiamo richiedere qual'è il nome del server SQL a cui dobbiamo connetterci, oppure la connessione ODBC da usare, un codice di attivazione, l'e-mail dell'utente. Possiamo chiedere quello che vogliamo, e scriverlo nel registry dove vogliamo.

Il succo del discorso (che con Visual Installer è irrealizzabile, almeno, io non ci sono mai riuscito) è che possiamo personalizzare le finestre di dialogo che compaiono durante il setup. By default, infatti, il classico setup mostra le finestre di Welcome, Installation Folder, Confirm Installation e Finished. Per controllare, aprite il progetto che abbiamo creato, andate nel menù View --> Editor --> User Interface.
La sequenza delle dialog è proprio quella, giusto?

Adesso, supponiamo di voler chiedere all'utente, per esempio, il suo nome-utente, durante il setup. Dobbiamo aggiungere una finestra di dialogo in più rispetto al default, perchè normalmente questa cosa non ci viene mai chiesta. Cliccate con il destro su Start --> Add Dialog. Dalla finestra, selezionare il template Textboxes (A). Nel nodo apparirà il nuovo dialog. Spostiamolo (trascinandolo) tra Start e Installation Folder (nessun custom dialog può trovarsi dopo Confirm Installation). Purtroppo, non possiamo vedere l'aspetto di questo dialog, quindi dobbiamo un attimo lavorare di fantasia ed immaginarci quello che VS ci propone.
Il dialog riporta 4 TextBox, ognuna con le seguenti proprietà:

Edit#Label, la label da associare a questa TextBox
Edit#Property, la property che conterrà il valore immesso dall'utente
Edit#Value, il valore predefinito della TextBox
Edit#Visible, indica se far vedere o meno questa TextBox

dove # è un numero che va da 1 a 4. Se una TextBox non ci serve, è sufficiente renderla invisibile tramite Edit#Visible = false. Io ho creato la mia custom dialog in questo modo:

Edit1Label = "Inserisci il nome-utente con cui ti vuoi loggare per default :"
Edit1Property = NOMEUTENTE
Edit1Value = "username"
Edit1Visible = true

Tutte le altre TextBox le ho rese invisibili. A questo punto, il nostro setup incorpora una finestra di dialogo aggiuntiva, che richiede una certa informazione, nel nostro caso lo username che verrà "salvato" in NOMEUTENTE. Il passaggio successivo è quello di andare a scrivere fisicamente il valore immesso dall'utente nel registry. Come fare?

E' sufficiente andare su View --> Editor --> Registry. Esplorare il registry fino al punto voluto (per esempio HKEY_CURRENT_USER\Software\[Manufacturer]\DuringSetup. In questo punto del registro, creare un nuovo string value, chiamarlo Username. Nella finestre delle Property definire il valore che deve assumere, che non è una stringa costante, ma semplicemente [NOMEUTENTE] ovvero il valore dinamico inserito dall'utente.

Altre info sulle Custom Dialog
I template forniti da .NET comprendono dialog con OptionButtons e CheckBoxes. In più, template speciali danno la possibilità di mostrare readme (in formato RTF), la classica license agreement, etc. etc. Attenzione: ogni template è disponibile una volta soltanto - in altre parole, il template TextBoxes (A) può essere inserito una volta soltanto.

Siccome mi stavo troppo divertendo, ho fatto qualche test con gli altri templates di VS, cioè quelli con i CheckBoxes, i RadioButtons, il Readme, etc. etc. e volevo un attimo riportare qualche nota che potrebbe essere utile.

Il Read Me non ha nulla di particolare: è sufficiente dare un file RTF che si vuole far vedere nel setup.

I templates CheckBoxes assegnano il valore 1 alla property quando la relativa CheckBox è attivata. Se la CheckBox è disattivata, la property è "", stringa vuota.

I templates RadioButtons hanno una particolarità. Dal momento che uno solo dei RadioButton può essere attivato, la property è associata a tutto il dialog. A seconda del RadioButton attivato, il value è diverso.

Preciso che secondo la Study Guide di Lorenzo che ho preso come modello per lo studio, non c'è bisogno di scendere così nel dettaglio per quanto riguarda la creazione di Setup per le applicazioni .NET. Però io mi sono davvero divertito a fare esperimenti in tal senso, e di conseguenza ho voluto comunque parlarne all'interno della mia serie di post relativi a MCAD.

L'unico aspetto che vorrei approfondire adesso è creare una classe che eredita da System.Configuration.Install.Installer per avere il pieno controllo del processo di deployment. Stay tuned, ne varrà la pena!!!

powered by IMHO 1.2

Print | posted on Monday, September 26, 2005 2:47 PM | Filed Under [ MCAD ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET