Domanda

Io sono un nuovo programmatore di Windows e non so dove devo conservare configurabili dall'utente impostazioni dell'applicazione.Capisco la necessità di fornire una user friendly significa per l'utente di modificare le impostazioni dell'applicazione, come un Modifica | Impostazioni di forma o simili.Ma dove devo conservare i valori dopo che l'utente preme il pulsante Applica in che forma?

Quali sono i pro e i contro di memorizzare le impostazioni del registro di sistema di Windows vsla loro memorizzazione in locale il file INI o file di configurazione o simili?

È stato utile?

Soluzione

Pro del file di configurazione:

  1. Facile da fare.Non c'è bisogno di conoscere eventuali chiamate API di Windows.Hai solo bisogno di sapere il file di I/O interfaccia di linguaggio di programmazione.
  2. Portatile.Se si porta l'applicazione di un altro sistema operativo, non è necessario modificare le impostazioni di formato.
  3. Modificabili dall'utente.L'utente può modificare il file di configurazione al di fuori del programma in esecuzione.

Pro del registro di sistema:

  1. Sicuro.L'utente non può eliminare accidentalmente i file di configurazione o danneggiare i dati, a meno che lui/lei sa che su regedit.E quindi l'utente è solo in cerca di guai.
  2. Non sono un esperto programmatore di Windows, ma sono sicuro che utilizzando il registro di sistema rende più facile per fare altre specifiche di Windows cose (le impostazioni specifiche dell'utente, amministrazione di rete, roba come criteri di gruppo, o qualunque altra cosa).

Se avete solo bisogno di un modo semplice per memorizzare config informazioni, mi sento di raccomandare un file di configurazione, utilizzando INI o XML come formato.Io suggerisco di usare il registro di sistema solo se c'è qualcosa di specifico che si desidera ottenere fuori di utilizzo del registro di sistema.

Altri suggerimenti

Jeff Atwood è un grande articolo su registry di Windows, e perché è meglio utilizzare .INI file.

La mia vita sarebbe un diavolo di molto più facile se per le impostazioni dell'applicazione sono stati memorizzati in un posto dove ho potuto facilmente vedere, manipolare, e di eseguirne il backup.Come dire...nel file INI.

  • Il registro è un singolo punto di errore.Ecco perché ogni singola modifica del registro di sistema punta troverete mai inizia con un grosso e grasso, urlando disclaimer su come si può rompere il vostro computer con regedit.
  • Il registro è opaco e binario.Quanto non mi piace l'angolo di staffa di imposta, almeno XML file di configurazione sono abbastanza leggibile, e permettono a molti commenti, come si vede in forma.
  • Il registro deve essere in sincronia con il filesystem.Eliminare un'applicazione senza la "disinstallazione" e si è lasciato con la raffermo registro di sistema irreparabili.O se un'app ha un mal scritto uninstaller.Il filesystem non è più la dichiarazione di record, deve essere tenuto in sincronia con il registro di sistema in qualche modo.Si tratta di un totale violazione del LAVAGGIO principio.
  • Il registro è monolitico.Diciamo che si voleva spostare un'applicazione a un diverso percorso sul computer, o anche una macchina differente complessivamente.Buona fortuna per l'estrazione le impostazioni rilevanti per una particolare applicazione dal gigante del registro di sistema tar.Una data applicazione, in genere ha decine di impostazioni sparsi in tutto il registro.

In base alla documentazione GetPrivateProfileString, si dovrebbe utilizzare il registro di sistema per la memorizzazione di informazioni di inizializzazione.

Tuttavia, dicendo questo, se si vuole ancora utilizzare .i file ini, e utilizzare il profilo standard Api (GetPrivateProfileString, WritePrivateProfileString, e simili) per accedere ad essi, forniscono built-in di modi per fornire automaticamente "virtuale .ini file" sostenuto dal registro di sistema.Win-Win!

C'è una domanda simile qui che copre alcuni dei pro e dei contro.

Vorrei suggerire di non utilizzo del registro di sistema, a meno che la vostra applicazione assolutamente bisogno.Dalla mia comprensione, Microsoft sta cercando di scoraggiare l'uso del registro di sistema grazie alla flessibilità del file delle impostazioni.Inoltre, non mi consiglia di utilizzare .i file ini, ma utilizzando alcuni dei built-in funzionalità per .Netto per il salvataggio utente/impostazioni dell'app.

Utilizzo di un file ini, nella stessa directory dell'applicazione, rende possibile con l'applicazione.Così dopo aver ricaricato il sistema operativo, è sufficiente ripristinare la directory dell'applicazione, e la tua configurazione nel modo desiderato.

C'è un altro vantaggio di utilizzare un file INI sul registro di sistema, che non ho visto citato:Se l'utente utilizza una sorta di volume/crittografia basata su file, si può ottenere il file INI per essere crittografati in modo abbastanza semplice.Con il registro di sistema probabilmente sarà più problematico.

Come Daniel indicato, la memorizzazione dei dati di configurazione nel registro di sistema dà la possibilità di utilizzare i Modelli di amministrazione.Che è, si può definire un Modello di amministrazione, di utilizzare in un Gruppo di Politica e di amministrare la configurazione dell'applicazione a livello di rete.A seconda della natura dell'applicazione, questo può essere un grande vantaggio.

Sono d'accordo con Daniele.Se si tratta di una grande applicazione che penso che mi piacerebbe fare le cose nel registro di sistema.Se si tratta di una piccola applicazione che si desidera avere aspetti configurabile dall'utente senza fare un modulo di configurazione, andare per una rapida file INI.

Io di solito fare il parsing di questo tipo (se il formato in .file ini è opzione = valore 1 per riga, i commenti che iniziano con #):

static void Parse()
{
    StreamReader tr = new StreamReader("config.ini");
    string line;
    Dictionary<string, string> config = new Dictionary<string, string>();

    while ((line = tr.ReadLine()) != null)
    {
        // Allow for comments and empty lines.
        if (line == "" || line.StartsWith("#"))
            continue;

        string[] kvPair = line.Split('=');

        // Format must be option = value.
        if (kvPair.Length != 2)
            continue;

        // If the option already exists, it's overwritten.
        config[kvPair[0].Trim()] = kvPair[1].Trim();
    }
}

Edit:Mi dispiace, ho pensato che tu avessi specificato la lingua.L'attuazione di sopra è in C#.

Registro di sistema è ottimizzato per l'accesso rapido e facile aggiornamento, ed è l'unico modo per fare certe specifiche di Windows cose come l'associazione con un'estensione.E non si può ignorare l'argomento sull'eliminazione di una singola directory, disinstallare il programma Windows Vista non permette di modificare il file nella cartella dei File di Programma, in modo che la tua config bisogno di andare in una cartella diversa comunque.

C'è una linea guida generale per la programmazione di Windows - fare le cose il modo in cui Microsoft si aspetta da voi, e la vostra vita sarà molto più facile.

Detto questo, posso vedere l'appello del file INI, e non vorrei incolpare nessuno per considerarlo.

Esistenti risposte coprire un sacco di terra, ma ho pensato di parlare di un altro punto.

Io uso il registro di sistema per memorizzare le impostazioni a livello di sistema.Che è, quando 2 o più programmi devono essere esattamente la stessa impostazione.In altre parole, un'impostazione condivisa da diversi programmi.

In tutti gli altri casi io uso un locale del file di configurazione che si trova nello stesso percorso del file eseguibile o un livello basso (in una directory di Configurazione).I motivi sono già trattati in altre risposte (portatile, può essere modificato con un editor di testo, ecc).

Perché mettere impostazioni a livello di sistema nel registro di sistema?Bene, ho scoperto che se un impostazione è condivisa, ma si utilizza locale i file di configurazione si finisce per duplicare le impostazioni.Questo può significare che si finisce bisogno di cambiare una impostazione in più luoghi.

Per esempio, dire che Un Programma e Programma B, entrambi puntano allo stesso database.Si può avere un "livello di sistema" impostazione del registro di sistema per la stringa di connessione.Se si vuole puntare a un database diverso, è possibile modificare la stringa di connessione in un unico luogo, e entrambi i programmi ora eseguire da altri database.

Nota - non vi è alcun punto nel usando il registro di sistema in questo modo, se due o più programmi che non è necessario utilizzare gli stessi valori.Ad esempio, un Programma e Un Programma di B sia bisogno di una stringa di connessione al database che può essere lo stesso, ma non sempre.Per esempio, voglio Programma B per ora uso un database di test, ma il Programma dovrebbe fare uso di un database di produzione.

Con l'esempio di cui sopra, si potrebbe avere alcuni locali di configurazione ignora impostazioni a livello di sistema, ma si può iniziare a ricevere troppo complicato per le attività più semplici.

C'è uno svantaggio per l'ini o ai file di configurazione e che è la loro individuazione, se l'utente ha la possibilità di selezionare la posizione in cui è installato il programma.

L'Applicazione è uno che viene installato con un Programma di Installazione, o è solo "Estrarre ed Eseguire"?Nel primo caso, guardare i pro e i contro descritto qui.Ma per Estrarre ed eseguire il Registro di sistema è a mio parere un "no-go", come le persone si aspettano di essere in grado di semplicemente cancellare la cartella dell'applicazione per sbarazzarsi del vostro programma.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top