2010-03-02 10 views
15

Installare la mia app nella directory "Programmi". E io installo i dati, sotto la directory "ProgramData":Scrivere nella cartella "ProgramData" (W7 e Vista) .NET

Environment.SpecialFolder.CommonApplicationData

In Programdata ho creato cartella in cui salvare i dati. Esempio:

C: \ ProgramData \ MyApp \ MyData \ qui ho i file e le cartelle

Sotto XP tutto funziona bene. Ma non sotto Vista o sistema operativo W7.

Posso leggere i file in questa directory, ma non riesco a scrivere file, non riesco a creare nuovi file, ecc. L'utente è registrato come amministratore.

Dove posso memorizzare i dati senza restrizioni? Ho bisogno di memorizzare i dati in una cartella visibile per tutti gli utenti

Modificato:

Ho questo codice nel mio file app.manifest:

<?xml version="1.0" encoding="utf-8"?> 
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <!-- Opciones del manifiesto de Control de cuentas de usuario 
      Si desea cambiar el nivel de Control de cuentas de usuario de Windows, reemplace el 
      nodo requestedExecutionLevel por alguno de los siguientes. 

     <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> 

      Si desea utilizar la virtualización de archivos y del Registro para la compatibilidad 
      con versiones anteriores, elimine el nodo requestedExecutionLevel. 
     --> 
     <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</asmv1:assembly> 
+0

Articolo correlato: http://stackoverflow.com/questions/1191941/c-file-write-permission-issue-under-program-files-folder –

risposta

4

Questa è una cosa UAC. Il tuo programma viene eseguito come amministratore per la creazione/eliminazione di file/cartelle in questa cartella speciale.

+0

Scusa, non lo capisco. Non riesco a scrivere né essere un utente amministratore. E i clienti non vogliono disabilitare UAC. – aco

+2

Bene, anche se hai effettuato l'accesso come amministratore, di solito non disponi di tutti i privilegi di amministratore. Questo è il concetto di UAC. Si ha lo stesso comportamento quando si desidera eliminare manualmente un file da qualche parte in "Programmi". Ma se esegui la tua applicazione come amministratore (inizia con "Esegui come amministratore ...) è possibile eliminare/creare file in quella cartella. Puoi anche forzare l'esecuzione dell'applicazione come amministratore tramite il file manifest. –

+0

Ok, quindi, nel mio file app.manifest, devo inserire questo codice "" invece di " "? – aco

8

un facile capire spiegazione dei diversi luoghi che è possibile memorizzare i dati del programma può essere trovato qui:

http://blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx

Per quanto riguarda ProgramData, si dice:

FOLDERID_ProgramData/ sistema. Environment.SpecialFolder.CommonApplicationData L'utente non vorrebbe mai cercare qui in Explorer, e le impostazioni sono cambiate qui s dovrebbe interessare ogni utente sulla macchina . La posizione predefinita è % systemdrive% \ ProgramData, che è una cartella nascosta , su un'installazione di Windows Vista. Ti consigliamo di creare la tua directory e di impostare gli ACL che hai al momento dell'installazione.

+9

Informazioni "Vorresti creare la tua directory e impostare gli ACL necessari al momento dell'installazione". Come posso farlo? – aco

0

si tratta di un problema concettuale al primo sguardo:

NON dovrebbe usare la directory "ProgramData", ma alcuni file specifici dell'utente. I dati di installazione necessari devono essere installati nei "file di programma" o nel registro.

Problemi correlati