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

È stato utile?

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.

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