Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2764, trackbacks - 17617

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

Configuration Application Block per HappySign

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

powered by IMHO 1.2

Print | posted on martedì 8 novembre 2005 17.43 |

Feedback

Gravatar

# re: Configuration Application Block per HappySign

la entlib non contiene il configuration application block per il semplice fatto che la entlib è il configuration application block. prova ad aprire il sorgente e vedrai...
09/11/2005 0.09 | Andrea Boschin
Gravatar

# re: Configuration Application Block per HappySign

dimenticavo: se vuoi trovare il path degli application data per l'utente corrente usa il metodo Environment.GetSpecialFolder()
09/11/2005 0.12 | Andrea Boschin
Gravatar

# re: Configuration Application Block per HappySign

grazie Andrea!
Conosco Environment.GetSpecialFolder(), lo uso già adesso come ho scritto nel post...

però ho qualche dubbio "logico"...per usare il CAB, tecnicamente ho bisogno di due file .config:
1) un Settings.config relativo all'applicazione (separato per ciascun utente, bla bla bla)
2) un solo app.config che configura l'engine del CAB

domanda (ma che penso mettere sul forum): ad ogni avvio devo modificare app.config per poter puntare al Settings.config corretto? ma come faccio, dato che app.config è dentro C:\Programmi\HappySign?
insomma, ci devo ragionare anche su...o trovare documentazione seria...
09/11/2005 9.22 | Igor Damiani
Gravatar

# Re: Configuration Application Block per HappySign

Ciao,
perdonami se rispondo io sebbene non interpellato...

Secondo me il problema non si pone...semplicemente metti dentro app.config TUTTO cio' che non varia...
dentro settings.config ci metti le impostazioni utente ...

L'App.config lo modifica SOLO il setup, modificando (magari) solo alcune parti contrassegnate da placeholder...

My 2 cents...maaa ... PERCHE' ignori la mia richiesta di C# ??? :'(
Igor.
Gravatar

# Re: Configuration Application Block per HappySign

La "brutta notizia" è che nella versione di EntLib per il FW2.0 che uscirà in RTM a Dicembre, il CAB non ci sarà più. Verrà sostituito utilizzando il namespace System.Configuration presente nel FW2.0.

Oltretutto, almeno dalle mie prove sulla CTP di Novembre di EntLib 2, pare che non sia più possibile utilizzare file di configurazione esterna, bensi tutte le sezioni di configurazione (Data Access, Logging, Exception Handling, Caching, ecc) vengono inserite in App.config / Web.config.

Il problema con la CTP è che non c'è documentazione o se c'è è scarna, per cui mi sto facendo un bel lavoro (leggi c..o) a capire se è possibile cmq mantenere i file esterni.
09/11/2005 10.34 | Mauro Sagratella
Gravatar

# re: Configuration Application Block per HappySign

Igor:
hai centrato il discorso. Il fatto è che dentro app.config ho un'impostazione che punta al vero file di config. Il fatto è che questa setting, appunto, cambia da utente a utente, altrimenti non avrebbe senso tutto questo bel casino.
quindi, tecnicamente, ad ogni avvio dovrei usare Envinroment.GetFolderPath per ottenere il path specifico dell'utente ed aggiornare app.config. Ma questo non ha senso, perchè viola tutti i discorsi che abbiamo già fatto.
L'idea adesso è quello di scrivere dentro app.config un setting "generico", tipo Settings.config (senza specificare alcun path). Così facendo Settings.config è nella stessa dir dell'applicazione, e non va bene comunque. Quello che ho in testa è:

1) usando ConfigurationManager leggo il nome del file (Settings.config)
2) a run-time ottengo il path relativo dell'utente e concateno Settings.config
3) uso ConfigurationManager come solito...

Mauro:
mi interessa il discorso. anche io come te sto facendo esperimenti per capire qual'è il metodo migliore e pulito per fare quello che devo.

Tutti e due:
E' comunque una bella rottura di scatole!!!!
09/11/2005 10.56 | Igor Damiani
Comments have been closed on this topic.

Powered by: