Windows 7: dove e come posso memorizzare i dati indipendenti dall'utente della macchina?

StackOverflow https://stackoverflow.com/questions/1806356

  •  05-07-2019
  •  | 
  •  

Domanda

Ho un'app (32 bit c ++) in esecuzione su XP che devo adattare per funzionare con Windows 7 e Vista. Deve archiviare alcune decine di byte di dati in un luogo indipendente dall'utente. Sotto XP, ho archiviato i dati nel registro sotto HKEY_LOCAL_MACHINE \ Software. Quando eseguo l'app su Windows 7, le voci del registro sono virtualizzate e ogni utente riceve una copia separata dei dati.

Il registro non virtualizzato sembra un luogo logico per i dati, ma non ho idea di come procedere. Noto che ci sono una moltitudine di applicazioni che effettivamente memorizzano i dati lì; come fanno a farlo?

Sono anche disposto a conservare i dati altrove, dove esiste un repository globale ben noto? Tutto ciò di cui ho bisogno è un singolo file di piccole dimensioni.

Sono più o meno ignorante dell'intero business dei diritti / privilegi, quindi qualsiasi suggerimento, suggerimento, ecc. è molto apprezzato.

È stato utile?

Soluzione

Uno degli obiettivi di progettazione di Windows 7 è isolare i dati e le applicazioni dell'utente. Questo per migliorare la privacy, la sicurezza e la personalizzazione. In effetti, gli utenti standard in Win 7 non possono modificare i dati di altri utenti.

I luoghi standard in cui archiviare i dati dell'applicazione vengono restituiti da System.Environment.SpecialFolder . Si noti che non tutte le cartelle sono leggibili o scrivibili da tutti gli utenti. Ad esempio, CommonApplicationData è leggibile da tutti gli utenti, ma è scrivibile solo da quelli con una politica appropriata, come gli amministratori.

Se devi assolutamente avere dati condivisi tra gli utenti, un amministratore o uno con autorizzazione deve installarli in un percorso condiviso. Se gli utenti devono aggiornare questi dati, dovrebbero copiarli in una posizione in cui possono scrivere, come ApplicationData, e aggiornare le proprie copie private. Questa copia privata non può essere modificata da altri utenti. Non installare i dati in posizioni condivise a meno che l'applicazione non funzioni diversamente.

In Win7, infatti, è necessario installare tutte le applicazioni e i dati nell'applicazione e nelle cartelle di dati dell'utente connesso, non in percorsi condivisi. Se più utenti installano l'applicazione, ogni utente riceverà la propria copia dell'applicazione e dei dati. Questo è quasi sempre quello che vuoi. Se più utenti eseguono un'applicazione o un gioco, non si desidera che un utente cambi tutti gli altri. Se più utenti hanno davvero bisogno della stessa modifica, lascia che ogni utente aggiorni la propria copia privata quando ne ha bisogno. Se l'account di un utente viene violato o diventa malvagio, non vuoi che distrugga le applicazioni e i dati di tutti gli altri.

Inoltre, tieni presente che in Win7 gli utenti possono accedere a una macchina in remoto, quindi non è una buona idea memorizzare i dati specifici della macchina, come risoluzioni dello schermo o indirizzi IP, per utente. Invece, controlla questo ogni volta che la tua app viene eseguita.

Altri suggerimenti

IMHO, è irragionevole pensare che molte persone abbiano singoli utenti che installano le proprie copie di un pacchetto software. In effetti molti pacchetti non verranno installati a meno che non vengano eseguiti in ADMIN (ALLUSERS = 1). Se non vengono forniti mezzi ragionevoli per facilitare installazioni a livello di sistema a un livello di protezione inferiore a ADMIN, le installazioni a livello ADMIN rimarranno la norma.

Ad esempio, perché alcune installazioni di utenti non ADMIN (con privilegi intermedi) non sono state autorizzate a creare chiavi di registro in una parte limitata del registro (pacchetto HKLM \ SOFTWARE \) e directory in TUTTI GLI UTENTI \ DATI DELL'APPLICAZIONE \ pacchetto?

Ho deciso di richiedere un ADMIN (ALLUSERS = 1) .msi e creare chiavi di registro con protezione modificata.

Quindi, in una situazione in cui il mio cliente ha una workstation dedicata, la nostra applicazione (che deriva i dati da un buon vecchio file INI a cui faremo r + w) il nostro messaggio al personale IT è che dovranno installare sulla stessa macchina per ogni utente che hanno?

Dobbiamo leggere / scrivere su (sotto Windows 7 / Vista): Environment.GetFolderPath (Environment.SpecialFolder.CommonApplicationData) + @ " \ GoScan \ GoScan.ini "

ma come altri hanno scoperto che le autorizzazioni per un utente tipico non sono sufficienti per r + w. È un "accettabile"? esercitarsi a cambiare i permessi di directory / file dopo che il programma di installazione è stato eseguito o forse durante l'installazione (non sono sicuro di dove farlo nel progetto di installazione di VS 2008).

-Paul

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