Sto scrivendo un'applicazione desktop WinForms che verrà inviata a diversi client e mi chiedo quale sia il modo migliore per implementare un file di configurazione utente. Normalmente userei il built-in Settings.settings
o app.config
per memorizzare le impostazioni dell'utente, ma in questo caso ciò che voglio memorizzare è univoco per ogni client, voglio che sia configurato prima di inviarlo e voglio evitare di ricompilare ogni tempo spediamo ad un nuovo cliente.
Quello che voglio che il mio file di configurazione sia archiviare alcune informazioni sulla grafica specifica del client usata nel programma e alcune password (con hash).
Non sospettiamo che gli utenti possano hackerare qualsiasi cosa nel programma; stiamo solo cercando di evitare che i normali utenti di livello "tecnologico" apportino modifiche o accedano a determinati moduli che un manager dovrebbe modificare. Fino ad ora la password è stata codificata e nel giro di pochi anni tutti hanno imparato a sapere di cosa si tratta. Vorremmo avere più controllo su quali password andare dove, ma non necessariamente dare ai client il controllo delle modifiche della password.
Ho scritto un programma separato che (de) serializza una classe di configurazione in un file XML che verrebbe inserita nella directory appropriata al momento dell'installazione, in modo che tutte le persone debbano fare (dopo che sono fuori dalla scena) avere il .msi
del programma, creare un file di configurazione xml utilizzando questo programma separato, includere la grafica che desiderano in una sottocartella e comprimere tutto. Quindi quando l'utente decomprime e installa, tutto viene messo nel posto giusto. Quando il mio programma viene caricato, cerca il mio file di configurazione per completare il caricamento. Se non riesce a trovarlo, fornisce all'utente una modifica per individuarlo altrimenti il programma non si apre.
Ho letto la classe ConfigurationManager
ma non riesco a capire come potrei usarla al meglio. Non ho trovato molto sulle persone che usano file di configurazione esterni e non sono sicuro che la mia situazione sia davvero unica o che non stia pensando abbastanza all'interno della scatola. È un buon design? Dovrei fare diversamente? Se hai avuto una situazione simile come hai risolto?