2009-11-06 8 views
12

Che uso fanno se non possono essere comunque modificati dai valori predefiniti? Domanda retorica.Come faccio a evitare che le impostazioni dell'ambito dell'applicazione siano di sola lettura?

Innanzitutto, qual è il modo migliore per aggirare il sistema Impostazioni e scrivere direttamente nel file delle impostazioni dell'ambito dell'applicazione (problemi di sicurezza nel prossimo paragrafo)? XmlReader/XmlWriter?

IIRC, se un'applicazione tenta di scrivere nella sua cartella Programmi, Windows Vista e 7 fanno un po 'di magia per impedirlo. Suppongo che ho bisogno di chiamare UAC per elevare e devo mettere quell'icona scudo fantasia sul pulsante OK della finestra delle opzioni della mia applicazione e così via. Link a un rapido how-to?

In alternativa, potresti dirmi che quello che sto cercando di fare è stupido e dovrei archiviare le mie impostazioni di ambito applicativo modificabili da qualche altra parte.

risposta

10

Se le si modificano nelle impostazioni "utente", possono essere modificate nel codice e quando si chiama Salva() verranno salvate in un file user.config nella cartella delle impostazioni locali degli utenti correnti.

Ovviamente, questo significa che possono essere diversi per ogni utente. In generale, le impostazioni delle applicazioni globali uguali per tutti gli utenti non vengono modificate nel codice in quanto una modifica apportata da un utente avrà effetto su tutti gli altri (quindi le impostazioni dell'app sono di sola lettura).

Se non si desidera che siano scope dell'utente, dare un'occhiata alla classe ConfigurationManager. Questo ti permetterà di leggere e scrivere manualmente in file .config. Ricorda però che la cartella c: \ program files \ è protetta e gli utenti normali non potranno accedervi (ciò comporterà richieste di UAC o errori in vista/win7). Considera attentamente come gestirli e ricorda che qualsiasi modifica a un'app.config interesserà tutti gli utenti.

Non c'è nessuna posizione in Windows a cui tutti gli utenti abbiano accesso in scrittura.

+2

Ma questo è esattamente quello che voglio! L'utente A modifica qualcosa e l'utente B non deve ripetere tale modifica. – CannibalSmith

+9

È strano per me che più persone non abbiano bisogno di questa funzione. Sicuramente molte applicazioni hanno impostazioni globali che il programmatore vuole costruire per un'interfaccia utente amichevole. –

+1

@Ben: è possibile utilizzare la classe [ConfigurationManager] (http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx) se si desidera salvare le impostazioni direttamente sul globale. file exe.config.Ovviamente, se quel file si trova in c: \ programfiles \ l'utente avrà bisogno delle appropriate autorizzazioni di amministratore. Per prima cosa aprire la configurazione in questo modo: var config = ConfigurationManager.OpenExeConfiguration (ConfigurationUserLevel.None); quindi aggiungi la tua nuova impostazione in questo modo: config.AppSettings.Settings.Add ("chiave", "valore"); (Oppure puoi creare sezioni di configurazione personalizzate) Non dimenticare di chiamare Salva. –

0

Guardate qui: Best practice to save application settings in a Windows Forms Application

La classe ApplicationSettings non supporto salvare le impostazioni al file app.config . Questo è molto dal design , le app che funzionano con un account utente protetto correttamente (si pensi a Vista UAC) non hanno accesso in scrittura alla cartella di installazione del programma .

È possibile combattere il sistema con la classe ConfigurationManager. Ma la soluzione banale è di andare nella finestra di progettazione delle impostazioni e modificare l'ambito dell'impostazione in Utente. Se questo provoca disagi (per esempio, l'impostazione è rilevante per tutti gli utenti), si dovrebbe mettere le opzioni presentano in un programma separato in modo da poter chiedere la richiesta di elevazione privilegio. Oppure rinunciare allo usando un'impostazione.

Problemi correlati