Memorizzazione delle impostazioni utente
-
03-07-2019 - |
Domanda
Environment.SpecialFolder.CommonApplicationData
* restituisce " C: \ Documents and Settings \ Tutti gli utenti \ Dati applicazioni " sotto XP che è scrivibile per tutti gli utenti
* restituisce " C: \ ProgramData [MyApp] \ " sotto Vista e questo non è scrivibile per gli utenti regolari
Ora perché voglio CommonFolder? Perché, un amministratore installerà il mio database del software su XP (o Vista) sotto l'account Admin, ma quando l'utente accederà indietro ed eseguirà il mio software, l'account corrente chiamerà il mio software per guardare in una posizione diversa in cui è stato installato il database: la directory dell'utente in Documenti e impostazioni ....
quindi AllUsers (cartella comune) è comune all'amministratore e al normale utente non amministratore ..
Questo mi fa impazzire: dove mettere il mio database in modo che funzioni sotto Vista e XP ????? Grazie Jonathan
Soluzione
Stai usando un programma di installazione per far funzionare l'amministratore? In tal caso, dovresti essere in grado di utilizzare le impostazioni del programma di installazione, oltre a un manifest di assembly / eseguibile adeguato per consentire all'applicazione (indipendentemente da chi lo sta eseguendo) le autorizzazioni appropriate per aggiornare / modificare i file in ProgramData specifici per la loro applicazione.
Eseguo uno scenario simile (l'applicazione si installa su Programmi, l'installazione di repository di dati comuni su ProgramData, la configurazione dell'utente, l'archivio dei file di salvataggio su C: \ Users) e il manifest e le impostazioni in Il programma di installazione WiX ha permesso che funzionasse.
Altri suggerimenti
Le impostazioni specifiche dell'utente devono essere archiviate nella cartella dei dati dell'applicazione dell'utente ( Environment.SpecialFolder.ApplicationData
), in modo che se più utenti accedono al computer ognuno ottenga le proprie impostazioni. Crea un db di impostazioni utente predefinito per il programma nella cartella principale del programma al momento dell'installazione e copiarlo nella cartella di un utente la prima volta che l'utente esegue il programma (saprai che è la prima volta perché il file db non esiste ancora).
Se si dispone di impostazioni che dovrebbero applicarsi a tutti gli utenti sulla macchina, si desidera che tali impostazioni vengano impostate da un amministratore e si desidera che siano protette da modifiche accidentali. Memorizzarli in un luogo in cui gli utenti normali non hanno accesso in scrittura è una buona cosa.
Vista è impostato in modo tale che i file salvati dall'account di un utente non possano essere modificato da un altro utente account. Questo rinforza l'isolamento tra un account utente e un altro, oltre a proteggere impostazioni / file che influenzano lo stato del tutto sistema.
Il tuo programma dovrebbe davvero installare qualunque sia lo stato della macchina di cui ha bisogno in ProgramData al momento dell'installazione - questo la cartella è condivisa tra tutti gli utenti conti; tuttavia, è di sola lettura tipo di condiviso. Amministratore sono necessari privilegi per modificarli file se l'utente corrente non lo ha fatto crearli perché influenzano il intero computer, non solo la corrente account utente.
In conformità con questa politica, il la sicurezza nella cartella ProgramData è come segue:
Sistema: pieno controllo su file e amp; cartelle Amministratori: Controllo completo su file e amp; cartelle Creatore / Proprietario: Pieno controllo su file e amp; cartelle Utenti: sola lettura per i file, ma possibile crea nuove cartelle e file
Ciò che questo compie è che consente a qualsiasi utente di leggere e creare un cartella / file ovunque all'interno del file Cartella ProgramData, ma l'utente può modificare solo i file che erano creato dal loro account utente; essi impossibile modificare i file creati da un altro account utente.
L'unica eccezione che conosco questa politica è la c: \ users \ public cartella, progettata per consentire agli utenti di archiviare documenti e simili vogliono essere leggibili / scrivibili dal mondo.
Da qui. Sembra che qualcun altro abbia avuto lo stesso problema.
Puoi utilizzare IsolatedStorageFile .GetMachineStoreForApplication e IsolatedStorageSFageGet metodi?
Mi scuso se ho frainteso la tua domanda.
dove mettere il mio database in modo che funzioni sotto Vista e XP
Se questo database è un file di dati di SQL Express o altre risorse condivise, deve trovarsi in una posizione che l'account del processo server può leggere / scrivere.
restituisce " C: \ ProgramData [MyApp] \ " [ errore di battitura corretto ] in Vista e questo non è scrivibile per gli utenti normali
Non secondo un rapido controllo presso l'ACL qui (in realtà Win2k8):
PS C:\ProgramData> get-acl . | select -expand access [...] FileSystemRights : ReadAndExecute, Synchronize AccessControlType : Allow IdentityReference : BUILTIN\Users IsInherited : False InheritanceFlags : ContainerInherit, ObjectInherit PropagationFlags : None FileSystemRights : Write AccessControlType : Allow IdentityReference : BUILTIN\Users IsInherited : False InheritanceFlags : ContainerInherit PropagationFlags : None
Nota gli ultimi ACE, gli utenti normali hanno accesso in scrittura, ma solo alle cartelle e ai file che contengono, non ai file direttamente in C: \ ProgramData.
Tuttavia, se un utente crea una cartella in C: \ ProgramData, gli altri utenti non avranno i permessi di scrittura.
Risposta: crea una cartella sotto ProgramData per il tuo database e imposta l'ACL su quella cartella per dare a tutti gli utenti la lettura di & amp; accesso in scrittura ai file in quella cartella.