Impossibile copiare il file con le autorizzazioni appropriate utilizzando FileIOPermission

StackOverflow https://stackoverflow.com/questions/159598

  •  03-07-2019
  •  | 
  •  

Domanda

Questo snippet funziona bene se provo a scrivere in una directory utente ma non appena provo a scrivere in Programmi, si esegue silenziosamente e il file non è stato copiato (nessuna eccezione). Se provo a copiare il file in C: \ o in C: \ Windows, prendo una UnauthorizedAccessException.

Conosci un altro modo per ottenere le autorizzazioni per scrivere in quella directory o per farlo funzionare in un altro modo?

Qualsiasi aiuto molto apprezzato! Grazie

using(FileStream fs=File.Open(source, FileMode.Open)){ }  
try  
{  
    FileIOPermission fp = new FileIOPermission(FileIOPermissionAccess.Write,   
                          AccessControlActions.Change, "C:\\Program Files\\MyPath");  
    fp.Demand();  //<-- no exception but file is not copied
    File.Copy("C:\\Users\\teebot\\Documents\\File.xml","C:\\Program Files\\MyPath\\File.xml",true);  
}  
catch(SecurityExceptions)  
{  
    throw(s);  
} 
catch(UnauthorizedAccessException unauthroizedException)
{
    throw unauthroizedException;
}
È stato utile?

Soluzione

Se stai eseguendo Vista, il sistema reindirizza semplicemente le scritture nella cartella dei file di programma, questo è fatto in modo che il vecchio programma che mantenga la loro configurazione nella directory del programma continui a funzionare quando l'utente non è un amministratore (o UAC è abilitato).

Tutto quello che devi fare è aggiungere un manifest al tuo programma che specifichi il livello di accesso richiesto, quindi il sistema presume che il tuo programma sia compatibile con Vista e disattiva tutte quelle patch di compatibilità.

Puoi vedere un esempio di un file manifest sul mio blog all'indirizzo:

http://www.nbdtech.com/blog/archive/2008/06/16/The-Application-Manifest-Needed-for-XP-and-Vista-Style-File.aspx

(l'obiettivo del post è ottenere la versione corretta dei controlli comuni, ma ci sono anche le dichiarazioni di sicurezza di Vista)

Altri suggerimenti

Non scrivere nella cartella Programmi.

Questo è un grande no-no e causerà in particolare problemi quando arriva il giorno in cui il codice viene eseguito in Vista o su una macchina in un'azienda in cui gli utenti ottengono solo la sicurezza standard anziché i diritti di amministratore. Utilizzare invece la cartella Dati applicazioni.

Stai utilizzando Vista? In tal caso, potresti eseguire la virtualizzazione del file system. Questa è una funzione nelle versioni a 32 bit di Vista che consente a un utente normale di scrivere su parti protette del file system. È uno spessore introdotto per ridurre il dolore delle funzionalità LUA di Vista.

La versione breve è che il sistema operativo creerà un file system virtuale per alcune radici protette (come i file di programma). Quando un non amministratore tenta di scrivergli, verrà creata una copia modificata anziché l'originale. Quando il tuo account utente tenta di guardare il file vedrà la modifica. Altri account utente vedranno solo l'originale.

Versione più lunga: http: // thelazyadmin.com/blogs/thelazyadmin/archive/2007/04/26/file-system-virtualization.aspx

La sicurezza dell'accesso al codice concede o nega le autorizzazioni al codice . Non può essere utilizzato per sovrascrivere le autorizzazioni concesse / negate all'utente corrente.

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