Impossible de copier un fichier avec les autorisations appropriées à l'aide de FileIOPermission

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

  •  03-07-2019
  •  | 
  •  

Question

Cet extrait fonctionne bien si j'essaie d'écrire dans un répertoire utilisateur, mais dès que j'essaie d'écrire dans Program Files, il s'exécute simplement en mode silencieux et le fichier n'a pas été copié (pas d'exception). Si j'essaie de copier le fichier dans C: \ ou C: \ Windows, j'attrape une exception UnauthorizedAccessException.

Connaissez-vous un autre moyen d'obtenir les autorisations nécessaires pour écrire dans ce répertoire ou pour le faire fonctionner d'une autre manière?

Toute aide grandement appréciée! Merci

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;
}
Était-ce utile?

La solution

Si vous exécutez sous Vista, le système redirige simplement les écritures dans le dossier des fichiers du programme. Ainsi, les anciens programmes qui conservent leur configuration dans le répertoire du programme continueront à fonctionner si l'utilisateur n'est pas administrateur (ou UAC). activé).

Tout ce que vous avez à faire est d’ajouter à votre programme un manifeste spécifiant le niveau d’accès requis. Le système suppose alors que votre programme est compatible avec Vista et désactive tous ces correctifs de compatibilité.

Vous pouvez voir un exemple de fichier manifeste sur mon blog à l'adresse suivante:

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

(le post met l'accent sur l'obtention de la bonne version des contrôles communs, mais les déclarations de sécurité de Vista sont également présentes)

Autres conseils

N'écrivez pas dans le dossier Program Files.

C'est un non-non, et cela posera surtout des problèmes le jour où votre code s'exécutera sous Vista ou sur une machine d'une entreprise où les utilisateurs ne bénéficieront que d'une sécurité standard plutôt que de droits d'administrateur. Utilisez plutôt le dossier Application Data.

Utilisez-vous Vista? Si tel est le cas, vous pouvez être confronté à la virtualisation du système de fichiers. Cette fonctionnalité des versions 32 bits de Vista permet à un utilisateur normal d’écrire sur des parties protégées du système de fichiers. Il s'agit d'une cale introduite pour réduire les inconvénients des fonctionnalités LUA de Vista.

La version abrégée indique que le système d'exploitation crée un système de fichiers virtuel pour certaines racines protégées (telles que les fichiers de programme). Lorsqu'un non-administrateur essaie d'écrire dessus, une copie sera créée et modifiée à la place de l'original. Lorsque votre compte d'utilisateur essaiera de consulter le fichier, il verra le fichier edit.s. Les autres comptes d'utilisateur ne verront que l'original.

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

La sécurité d'accès au code accorde ou refuse des autorisations sur votre code . Il ne peut pas être utilisé pour remplacer les autorisations accordées / refusées à l'utilisateur actuel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top