Vista e ProgramData
-
02-07-2019 - |
Domanda
Qual è il posto giusto per archiviare i file di dati del programma che sono gli stessi per tutti gli utenti ma devono essere scrivibili per il programma? Quale sarebbe la posizione equivalente su MS Windows XP? Ho letto che C: \ ProgramData non è scrivibile dopo l'installazione da parte di utenti normali. È vero? Come posso recuperare quella directory a livello di codice usando Platform SDK?
Soluzione
SHGetFolderPath () con CSIDL di CSIDL_COMMON_APPDATA.
Ulteriori informazioni su http://msdn.microsoft .com / it-it / library / bb762181 (VS.85) aspx
Se è necessario il percorso in un file batch, è anche possibile utilizzare la variabile di ambiente% ALLUSERSPROFILE%.
Altri suggerimenti
C'è un ottimo riassunto delle diverse opzioni qui: http://blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead -di-programma-files.aspx
Dove devo scrivere i dati del programma Invece di Programmi?
È un aggiornamento del codice applicazione comune questo: " la mia applicazione era solita scrivere file per programmare i file. Sembrava un posto buono per dirlo come un altro altro. Aveva il nome della mia applicazione già e perché i miei utenti lo erano amministratori, ha funzionato bene. Ma ora vedo che questo potrebbe non essere un posto fantastico attaccare le cose come pensavo una volta, perché con UAC anche gli amministratori eseguito con privilegi di tipo utente standard La maggior parte delle volte. Quindi, dove dovrei metti invece i miei file? "
In realtà SHGetFolderPath
è obsoleto.
SHGetKnownFolderPath
dovrebbe essere usato invece.
Puoi usare:
CString strPath;
::SHGetSpecialFolderPath(NULL, strPath.GetBuffer(1024), CSIDL_COMMON_APPDATA, FALSE);
Vedi L'articolo di Raymond Chen su questa specifica domanda .
In breve, stai chiedendo una falla di sicurezza .