2013-09-30 8 views
5

che sto porting la mia applicazione su 8. Programma di Windows utilizza percorsoWindows 8: L'applicazione non è in grado di scrivere C: ProgramData

C: \ ProgramData \ MyProgramName \

per l'archiviazione dei backup. Funziona bene su Windows 7, ma ha accesso a "Accesso negato" quando lo eseguo su Windows 8.

Qual è il modo corretto e il luogo in cui archiviare i backup del programma (non correlati a un particolare utente)?

+0

Stai sviluppando app di Windows Store o winform/wpf? – Xyroid

+1

C++ nativo per desktop. – tmporaries

+0

Questo può aiutare: http://stackoverflow.com/questions/16276139/difference-between-program-data-and-appdata. In sostanza (non riesco a trovare il link che ho letto solo un giorno o due fa, mi dispiace - la cronologia del browser non è stata trovata). Si ottiene l'accesso in scrittura a una cartella durante l'installazione del programma. In seguito, i tentativi di scrittura su questa cartella falliranno. Quando si tenta di scrivere dati durante l'uso effettivo del programma (come distinto dalla fase di installazione), è necessario utilizzare una cartella diversa. Sospetto che il posto migliore da usare sia menzionato nella domanda a cui mi sono collegato. – enhzflep

risposta

4

C:\ProgramData ha impostazioni di sicurezza che impediscono all'utente standard di scrivere lì. Questo non è nuovo in Windows 8, Windows 7 era lo stesso, e anche la cartella equivalente su Vista è protetta in questo modo. Forse il tuo ambiente Windows 7 ha disabilitato il controllo dell'account utente, o forse hai protetto C:\ProgramData o C:\ProgramData\MyProgramName per consentire l'accesso in scrittura all'utente standard.

Ci sono un paio di approcci per l'uso di questa cartella. Alcune applicazioni scrivono lì solo durante l'installazione mentre il processo di installazione è in esecuzione elevata. Quindi l'applicazione stessa, che viene eseguita come utente standard, può leggere, ma non tenta mai di scrivere.

Un altro approccio prevede che l'installatore crei una sottocartella di C:\ProgramData protetta per consentire l'accesso in scrittura per l'utente standard o qualsiasi altro utente/gruppo che lo sviluppatore ritenga appropriato.

4

Vedo molti programmi che memorizzano i loro dati dell'applicazione non relativi all'utente nella cartella dell'applicazione comune. Ok, in realtà quello che fanno è creare una cartella all'interno della cartella dell'applicazione comune per archiviare i loro dati.

Per ottenere il percorso della cartella dell'applicazione comune, è possibile chiamare la funzione SHGetFolderPath con CSIDL_COMMON_APPDATA come id della cartella. Se non si deve supportare nulla prima di Windows Vista, è possibile chiamare la funzione SHGetKnownFolderPath e passare FOLDERID_ProgramData come id della cartella conosciuta.

Ah! Non sapevo che la cartella dell'applicazione comune non è scrivibile dagli utenti normali. Fortunatamente sembra che ci sia una soluzione raccomandata. Vedere questo articolo su MSDN, Data and Settings Management che afferma quanto segue "Se un'applicazione richiede agli utenti normali di avere accesso in scrittura a una sottodirectory specifica dell'applicazione di CSIDL_COMMON_APPDATA, l'applicazione deve modificare esplicitamente la sicurezza su tale sottodirectory durante l'installazione dell'applicazione. deve essere documentato nel questionario fornitore. "

+0

'CSIDL_COMMON_APPDATA' e' FOLDERID_ProgramData' in genere si espandono in 'C: \ ProgramData'. Quindi, come gestisci il problema di sicurezza? –

+0

@DavidHeffernan: "sicurezza" non è un nome che è possibile utilizzare isolatamente. Assicurare quali informazioni contro quale avversario? – MSalters

+0

@MSalters 'FOLDERID_ProgramData' è protetto per impedire la scrittura dell'utente standard. Ecco di cosa si tratta. Questa risposta non affronta questo. –