Windows 7 limita l’accesso alla cartella come fa Vista?

Ho notato che nella mia applicazione, la maggior parte dei problemi di compatibilità erano causati da “accesso negato” per alcune cartelle, come ad esempio:

Application Data [C:\ProgramData] Desktop [C:\Users\Public\Desktop] Documents [C:\Users\Public\Documents] Favorites [C:\Users\Public\Favorites] Start Menu [C:\ProgramData\Microsoft\Windows\Start Menu] Templates [C:\ProgramData\Microsoft\Windows\Templates] 

Windows 7 ha lo stesso problema di Vista? Con l’aiuto dei membri di Stack Overflow, so che su Vista posso usare CSIDL_APPDATA per abilitare l’accesso ai file senza problemi UAC o errori di “accesso negato”. Questo è valido anche per Windows 7?

Non è un “problema”, è una caratteristica. Si chiama User Account Control (UAC) , ed è uno dei modi in cui la sicurezza del sistema è stata rafforzata in Windows Vista. Windows 7 conserva infatti un modello di sicurezza simile.

Non c’è assolutamente alcun motivo per cui la tua applicazione debba prima pasticciare con le cartelle di sistema. Come hai già appreso, Windows fornisce un numero di posizioni per le applicazioni per memorizzare i dati, sia temporaneamente che permanentemente. Microsoft consiglia da molto tempo di sfruttare queste cartelle: erano la posizione preferita per l’archiviazione dei dati anche in versioni precedenti di Windows. Il fatto che tu abbia ignorato questo consiglio, eppure la tua applicazione continuasse a funzionare, era in realtà il bug. Il fatto che le versioni successive di Windows abbiano finalmente chiuso la vulnerabilità della sicurezza, rompendo così la tua applicazione, non dovrebbe essere né inatteso né inusitato.

Puoi trovare ulteriori informazioni su dove archiviare i tuoi dati su questa pagina . Vedi anche questo articolo del blog , che tenta di riassumere la serie di documentazione tecnica in una tabella a portata di mano. E come sempre, Raymond Chen offre una panoramica semplice ma istruttiva delle differenze tra le posizioni:

La differenza più importante tra My Documents e Application Data è che My Documents è dove gli utenti memorizzano i loro file, mentre Application Data è dove i programmi memorizzano i loro file.

In altre parole, se metti qualcosa in CSIDL_MYDOCUMENTS (My Documents), dovresti aspettarti che l’utente lo CSIDL_MYDOCUMENTS , spostandolo, cancellandolo, inviandolo via email ai propri amici, tutti i tipi di cose che gli utenti fanno con i loro file. Pertanto, i file che vanno lì dovrebbero essere cose che gli utenti riconosceranno come “le loro cose”. I documenti che hanno creato, la musica che hanno scaricato, quel genere di cose.

D’altra parte, se si inserisce qualcosa in CSIDL_APPDATA (Dati applicazioni), è meno probabile che l’utente lo stia facendo. Questo è il punto in cui si inseriscono i dati di supporto del programma che in realtà non è qualcosa che si desidera venga scambiato all’utente, ma che dovrebbe comunque essere associato all’utente. Tabelle ad alto punteggio, impostazioni del programma, personalizzazioni, eccezioni di controllo ortografico …

Esiste un’altra directory denominata CSIDL_LOCAL_APPDATA (Impostazioni locali \ Dati applicazioni) che funziona come CSIDL_APPDATA , tranne per il fatto che non viene copiata se il profilo utente si sposta. (Il ramo “Impostazioni locali” non viene copiato come parte del profilo utente roaming.) Consideralo come un percorso di archiviazione per utente per macchina. Cache e altri dati non essenziali dovrebbero essere tenuti qui, specialmente se sono grandi. Altri esempi di dati per utente non roaming sono le directory %TEMP% e Temporary Internet Files.