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!!!