2009-09-16 20 views
1

J'ai testé mon application pour voir si elle fonctionne correctement lorsqu'elle est exécutée par un utilisateur non-administrateur et j'ai rencontré des problèmes de gestion de fichiers. Je reçois une exception UnauthorizedAccessException en essayant d'écraser un fichier, si le fichier a été créé par et administrateur.Gestion des fichiers avec un utilisateur non-administrateur

Lors de l'écriture du fichier, je crée d'abord le fichier en tant que fichier .tmp, puis j'utilise File.Copy pour écraser l'original. Le fichier .tmp est créé, mais File.Copy échoue. Mes fichiers sont écrits dans un répertoire public ("C: \ Documents and Settings \ Tous les utilisateurs \ Application Data" dans XP).

Que puis-je faire pour que tous les utilisateurs puissent avoir un contrôle total sur les fichiers de l'application?

J'ai trouvé ceci:

 System.Security.AccessControl.DirectorySecurity sec = 
           System.IO.Directory.GetAccessControl (directory); 
     FileSystemAccessRule accRule = new FileSystemAccessRule (Globals.userIdentity, 
      FileSystemRights.FullControl, AccessControlType.Allow); 
     sec.AddAccessRule (accRule); 

Will faire ce qui précède dans le répertoire que tous les fichiers se trouvent dans résoudre ce problème? Ou devrais-je faire quelque chose pour chaque fichier? Si oui, quel est ce quelque chose?

Edit:

utilisateurs non administrateurs ne peuvent pas modifier les fichiers créés par un utilisateur admin. Ce n'est pas bien. J'ai besoin que tous les fichiers soient modifiables par tous les utilisateurs. N'existe-t-il pas une sorte d'autorisation qui peut être définie lors de la création initiale du fichier?

Répondre

1

Je viens de vérifier les permissions sur le répertoire All Users \ Application Data. Les listes de contrôle d'accès «Utilisateurs» et «Utilisateurs avec pouvoir» ne possèdent pas l'autorisation «Supprimer les sous-dossiers et les fichiers».

Ils peuvent supprimer leurs propres fichiers car la liste de contrôle d'accès "CREATOR OWNER" dispose du contrôle total. En ce qui concerne la façon de contourner le problème, vous pouvez accorder à tous l'accès à tous, mais une meilleure idée serait d'accorder aux utilisateurs "Utilisateurs" & "ACL" l'autorisation "Supprimer les sous-dossiers et fichiers" dans le répertoire appdata de votre application. .

Vous pouvez également affecter les autorisations "Supprimer" et "Modifier" sur le fichier lui-même pour "Utilisateurs" et "Utilisateurs avec pouvoir" lors de sa création.

1

Ce code donnerait à l'utilisateur des droits d'accès complets au dossier, mais cela pourrait échouer à nouveau sur la sécurité. La meilleure façon de s'assurer que votre application peut toujours stocker des informations est d'utiliser IsolatedStorage. Cependant, si vous avez besoin d'accéder à vos fichiers en dehors de votre application, ce n'est pas la meilleure solution.

+0

Certains fichiers peuvent nécessiter un accès depuis l'extérieur de l'application. Puisque c'est le cas, que dois-je faire? –

+0

Vous pouvez essayer d'utiliser le dossier Application Data de l'utilisateur. Par défaut, ils devraient y avoir accès sans être administrateur. Vous pouvez obtenir ce chemin pour un utilisateur avec Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData) Cela signifie que les données d'application ne sont pas partagées entre les utilisateurs. HTH. –

+0

Les données d'application doivent être partagées pour tous les utilisateurs.C'est pourquoi j'utilise le répertoire All Users \ Application Data. C'est juste que les fichiers créés lors de la connexion en tant qu'utilisateur admin ne peuvent pas être modifiés par des utilisateurs non-administrateurs. –

1

Que diriez-vous si vous utilisez un code similaire pour donner à tout le monde un accès complet au fichier après qu'il a été créé? Si je vous comprends bien, les fichiers seront toujours créés avec votre application, n'est-ce pas? Ensuite, l'utilisateur qui crée le fichier en premier lieu aura également le droit d'ajuster les paramètres de sécurité pour le fichier. Ensuite, il s'agit simplement de définir les droits publics du fichier une fois celui-ci créé et tous les utilisateurs peuvent le remplacer plus tard.

+0

C'est ce que j'ai fait, mais j'ai donné les crédits de réponse à R. Bemrose puisque c'est avec sa réponse que je suis venu à la solution. Merci quand même. –