Die Datei kann nicht mit den entsprechenden Berechtigungen kopieren FileIOPermission mit

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

  •  03-07-2019
  •  | 
  •  

Frage

Dieser Code-Schnipsel funktioniert gut, wenn ich in einem Benutzerverzeichnis zu schreiben versuchen, aber sobald ich in Program Files zu schreiben versuchen, es führt nur still und die Datei (keine Ausnahme) kopiert worden ist. Wenn ich versuche, die Datei in C zu kopieren: \ oder C: \ Windows ertappe ich eine UnauthorizedAccessException

.

Sie wissen eine andere Art und Weise die Berechtigungen zu bekommen in diesem Verzeichnis zu schreiben oder zu anders funktioniert?

Jede Hilfe sehr dankbar! Dank

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;
}
War es hilfreich?

Lösung

Wenn Sie unter Vista ausgeführt werden dann das System nur Umleitungen schreibt in den Programmdateien-Ordner, wird diese so altes Programm durchgeführt, die ihre Konfiguration im Programmverzeichnis halten wird weiterhin funktionieren, wenn der Benutzer kein Administrator (oder UAC ist aktiviert ist).

Alles, was Sie tun müssen, ist ein Manifest zu Ihrem Programm hinzufügen, die die erforderliche Zugriffsebene angeben, dann wird das System Ihr Programm übernehmen ist Vista-aware und schaltet alle diese Kompatibilität Patches.

Sie können ein Beispiel einer Manifest-Datei auf meinem Blog sehen unter:

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

(der Schwerpunkt der Post ist die richtige Version der gemeinsamen Kontrollen bekommen, aber die Vista-Sicherheits Erklärungen gibt es auch)

Andere Tipps

Schreiben Sie nicht in dem Ordner Programm.

Das ist ein großer no-no, und vor allem zu Problemen führen, wenn der Tag kommt, wo Sie den Code in Vista läuft oder auf einem Computer in einem Unternehmen, in den Anwender nur Standard-Sicherheit statt Admin-Rechte erhalten. Verwenden Sie die Ordner Anwendungsdaten statt.

Sind Sie mit auf Vista? Wenn ja, dann können Sie die Dateisystem-Virtualisierung laufen in. Dies ist eine Funktion in 32-Bit-Versionen von Vista, die ein normaler Benutzer erlaubt, auf geschützte Teile des Dateisystems zu schreiben. Es ist ein Shim eingeführt, um den Schmerz der LUA-Funktionen von Vista zu reduzieren.

Die kurze Version ist, dass das Betriebssystem ein virtuelles Dateisystem für bestimmte geschützte Wurzeln (wie Programmdateien) zu schaffen. Wenn ein Nicht-Administrator versucht, es zu schreiben, wird eine Kopie ein statt der ursprünglichen editierte erstellt werden. Wenn Ihre Versuche Benutzerkonto der Datei sehen wird es die edit.s Andere Benutzerkonten sehen nur das Original sehen.

Längere Version: http: // thelazyadmin.com/blogs/thelazyadmin/archive/2007/04/26/file-system-virtualization.aspx

Codezugriffssicherheit gewährt oder verweigert Berechtigungen für Ihre Code . Es kann nicht außer Kraft zu setzen Berechtigungen verwendet werden, die für den aktuellen Benutzer gewährt / verweigert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top