2009-10-10 12 views
5

Devo salvare un'impostazione che è quindi disponibile per tutti gli utenti dell'applicazione su una macchina data. Deve funzionare su Vista/Win 7 e l'applicazione non verrà avviata come amministratore.Come salvare un'impostazione per Tutti gli utenti in Vista

  • Impossibile salvarlo nella directory programma come la cartella Programmi è protetto su Vista
  • Impossibile salvare HKEY_LOCAL_MACHINE come che è protetto troppo
  • Impossibile salvare al server o web- servizio

Dove posso salvare i dati? Anche se i diritti dell'applicazione erano in qualche modo elevati durante l'esecuzione, la mia preoccupazione è che il registro sia ora virtualizzato in Vista - e quindi finirò con una speciale HKEY_LOCAL_MACHINE che è in realtà solo per l'utente corrente.

sto usando .NET

risposta

9

Common Application Data

System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) 

Si tratta di un percorso filesystem che è possibile utilizzare per salvare i dati tra più utenti e più versioni del sistema operativo. Il percorso potrebbe essere diverso a seconda della versione, ma poiché si utilizzano variabili di ambiente, la riga precedente verrà risolta in un percorso utilizzabile.

Edit:
voluto aggiungere questo come una nota da quando è stato solo implicito; non richiede autorizzazioni elevate per scrivere in questa directory, è pensato esattamente per questo scopo.

+0

Awsome! Esattamente quello che stavo cercando. Grazie! –

8

Come ha risposto correttamente Quintin, il percorso% ALLUSERSPROFILE% (Environment.SpecialFolder.CommonApplicationData in .NET) è quello che stai cercando.

Due cose importanti da tenere a mente, però, quando si fa così:

  • E 'buona norma creare una sottocartella per la vostra azienda e l'applicazione di utilizzare il programma di installazione dell'applicazione. Per esempio:

    Dim DataPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) 
    DataPath = IO.Path.Combine(DataPath, "ACME Corp.") 
    DataPath = IO.Path.Combine(DataPath, "Widget App") 
    DataPath = IO.Path.Combine(DataPath, "1.0") '//Optional, but possibly handy to easily migrate configuration files across major app versions 
    
  • Anche se tutti gli utenti avranno accesso in lettura alla cartella creata, l'accesso in scrittura è di default limitato alla all'account che ha creato la cartella, così come i membri del gruppo Administrators e LocalSystem. Se tutti gli utenti dovessero essere in grado di modificare un file di configurazione comune (creato da un utente, ma riscritto da un altro utente non amministratore), sarà necessario organizzare questo accesso in modo esplicito. Di nuovo, questo è fatto meglio dal vostro installatore app, ma potrebbe essere fatto dal codice pure, per esempio quando la vostra applicazione è prima esecuzione:

    Dim di As New IO.DirectoryInfo(DataPath) 
    Dim ds = di.GetAccessControl 
    ds.AddAccessRule(New Security.AccessControl.FileSystemAccessRule(...)) 
    di.SetAccessControl(ds) 
    
+0

Grazie, questo mi avrebbe sicuramente catturato! –

-1

Ecco una soluzione che consente di persistono le impostazioni per tutti utenti:

  1. Inserire un file di impostazioni in file di programma da leggere dall'applicazione.
  2. Per modificare questo file di impostazioni, creare una nuova applicazione progettata per scrivere sul file delle impostazioni.
  3. lanciare questa modifica delle impostazioni app dalla vostra applicazione principale con il verbo impostato su 'esecuzione come'

    Process p = new Process(); 
    p.StartInfo = new ProcessStartInfo("changeXMLSettings.exe"); 
    p.StartInfo.Verb = "runas"; 
    p.Start(); 
    

Ciò richiederà per l'elevazione e dare le impostazioni modificando il permesso all'applicazione di scrivere i file di programma directory.

+0

Considerando che abbiamo già una soluzione perfetta (e più corretta) per questo che è stata pubblicata circa 4 anni fa, perché dovresti voler utilizzare questa soluzione alternativa? –

Problemi correlati