Domanda

Sto chiamando CreateFile () per creare un file nella directory Dati programma. Sto usando SHGetSpecialFolderPath () per ottenere il nome della directory.

Ho un utente con Vista per il quale CreateFile () restituisce l'errore 5 (Accesso negato). Sarebbe utile se sapessi dove CreateFile () stava effettivamente tentando di creare il file in modo da poter controllare le autorizzazioni della sua cartella. Il problema con Vista (UAC) è che non sta tentando di creare il file nella directory in cui sono passato. Potrebbe anche trovarsi in una directory di VirtualStore. Un'ulteriore fonte di confusione è che questo utente è tedesco e sebbene SHGetSpecialFolderPath () stia restituendo & C; \ Program Data \ blah blah " come percorso, non penso che sia effettivamente lì dove si trova il percorso. Penso che il tedesco Vista usi la parola tedesca per "Dati programma". Vorrei poter dire all'utente " Questo è il percorso esatto in cui stiamo cercando di creare il file. Controlla le tue autorizzazioni su questa cartella. & Quot;

So che puoi ottenere il percorso da un handle di file aperto, ma in questo caso CreateFile () non riesce, quindi non ho un handle aperto. Come posso ottenere Vista per dirmi il percorso effettivo in cui sta tentando di creare il file?

È stato utile?

Soluzione

Altri suggerimenti

Se con UAC i percorsi utilizzati non sono quelli desiderati, il reindirizzamento è attivo. Per assicurarsi che il reindirizzamento non si verifichi, aggiungi a manifest all'applicazione che indica a Vista che l'applicazione è correttamente codificata e consapevole delle restrizioni di accesso (ad esempio, non si scrive ad esempio HKLM o la cartella dei programmi se la tua app non necessita dei privilegi di amministratore per funzionare).

Ma l'applicazione dovrebbe essere in grado di scrivere nella cartella APPDATA (se è quello che usi davvero).

Assicurati di utilizzare CSIDL_APPDATA e non CSIDL_COMMON_APPDATA (quest'ultimo è accessibile solo con privilegi di amministratore).

Per trovare il percorso reale (quello che ti aspetteresti) dire all'utente di digitare% APPDATA% nella barra di Explorer (o premere Windows + R, quindi digitare% APPDATA%, inserire). Questo aprirà l'esploratore su quella cartella.

La mia comprensione è che ProgramData viene utilizzato da Vista per scrivere file che stavano tentando di essere scritti in C: \ Programmi, ma non è riuscito, poiché a meno che non si esegua l'app come amministratore non è possibile scrivere all'interno dei file di programma. Forse dovresti provare a salvare i tuoi file nella cartella AppData sotto l'utente corrente.

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