Vedo che ho ricevuto un sacco di proteste per la mia
voglia di usare app.config per leggere e salvare le
applicazioni di HappySign. Sappiate che lotterò duramente e con tutte le mie
forze: posso anche avere torto, ma non me ne importa nulla, l'importante è
credere in quello che si dice. Non capisco perchè .NET metta un bel tappeto
rosso a chiunque voglia leggere i settings dal file
app.config, ma poi attui la politica "lì ci puoi solo leggere", "l'utente non ha i
permessi di scrittura su C:\Programmi\<nomeapp>", "non è il posto giusto",
bla bla bla. Mi sembra un po' quello che ho scoperto lavorando con
Click Once: pratico, veloce e comodo per applicazioni semplici
e spot pubblicitari, ma - francamente - inaccettabile per applicazioni di
un certo livello (primo fra tutti, mi sembra di averlo già detto,
l'applicazione viene scaricata ed installata in una cache privata dedicata
all'engine di Click Once , e non
nella banale ed
eterna C:\Programmi, poco controllo sul menù
Start, etc.).
Come dire: guarda, io ti do un'automobile, lussuosa,
bella e maneggevole, perchè ci puoi salire su una volta al giorno. Prendi questo
bicchiere d'acqua, però ne puoi bere solo metà. Bello questo CD di Ligabue,
però....occhio....puoi ascoltare solo 1/3 di ciascuna canzone. Certe cose
proprio non lo capisco. Se mi devi limitare, non darmi lo strumento e basta. Non
mettermi sotto il naso un bel app.config per poi elencarmi
tutta una serie di controindicazioni che, per me, superano di gran lunga i
vantaggi.
Comunque, chiudiamo le polemiche qui e vediamo di essere costruttivi.
Ho
deciso di usare la seguente directory per mantenere dati e settaggi di
HappySign:
C:\Documents and Settings\damiani\Application Data\HappySign
per salvare soltanto tre files: Signs.xml,
Config.tmp e settings.config. Il primo contiene il dataset con
firme & decorazioni. Il secondo è temporaneo e contiene alcuni valori per
mantenere lo stato dell'applicazione da una sessione all'altra. Il terzo è
quello di cui parlerò.
Questa directory è separata per ciascun utente, e
qui dentro dovrei avere i permessi di scrittura: più bello di così non
si può! La directory viene ritornata da una semplice chiamata:
string dir = System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
dir += @"\HappySign";
MessageBox.Show(dir);
Notare il file settings.config. Questo file viene utilizzato
con il Configuration Application Block dell'Enterprise Library per
il FW1.1, sebbene HappySign sia interamente in FW2.0. Questa scelta è
momentanea: dopo aver letto il post di Lorenzo di questa mattina, mi sono
interessato e ho dato un'occhiata. La November CTP dell'Enterprise
Library non contiene il Configuration Application Block, quindi mi sono
dovuto arrangiare ad usare quello per il FW1.1, appunto.
Ho sistemato il codice, ho creato una classe che mi
espone tutte le settings della mia applicazione, etc. etc. Ma anche qui ho
trovato/sto trovando delle difficoltà. Tutte le QuickStart e tutti
i tutorial che ho trovato in Rete dicono espressamente che per cominciare
ad usare il CAB bisogna andare su Start-->Programs-->Microsoft patterns
& practices.....in pratica, usare un tool per settare l'engine e dirgli dove
si trova il file settings.config. Però non ho ben
capito.....non conosco a priori il path del mio file config, perchè contiene lo
username dell'utente corrente. Non posso certe dire agli utenti di HappySign di
scaricarsi il tool dell'Enteprise Library per settare il path di un ipotetico file config.
Non ho ben capito come superare questo ostacolo. Durante
il deploy, posso dire all'installer di posizionare
settings.config esattamente nel percorso che voglio, però poi -
ripeto - non so come configurare il CAB. Quest'ultimo, in particolare, non
fa altro che lavorare - tra le altre cose - su app.config.
Quindi dovrei cercare di distribuire un app.config che sia uguale per tutti. Mi
sto chiedendo, ad esempio, se sia possibile impostare un path tipo:
C:\Documents and Settings\$USERNAME$\Application Data\HappySign
utilizzando una sorta di variabile d'ambiente che possa restituirmi
dinamicamente lo username dell'utente. Insomma, sebbene adesso la logica che
abbia messo in piedi mi piace di più, ho comunque diversi problemi che vedrò di
risolvere.
Ho proprio paura che i tempi di consegna di HappySign
ritarderanno un po'!!!