2008-10-28 7 views
2

J'essaie de définir les autorisations d'un dossier et de tous ses enfants sur un ordinateur Vista. Le code que j'ai jusqu'ici est celui-ci.Définition des autorisations de dossier sur Vista

public static void SetPermissions(string dir) 
     { 
      DirectoryInfo info = new DirectoryInfo(dir); 
      DirectorySecurity ds = info.GetAccessControl();    
      ds.AddAccessRule(new FileSystemAccessRule(@"BUILTIN\Users", 
          FileSystemRights.FullControl, 
          InheritanceFlags.ContainerInherit, 
          PropagationFlags.None, 
          AccessControlType.Allow)); 

      info.SetAccessControl(ds);    
     } 

Cependant, cela ne fonctionne pas comme je le souhaiterais.
Même si j'exécute le code en tant qu'administrateur, les autorisations ne seront pas définies.

Le dossier dans lequel je travaille se trouve dans C: \ ProgramData \ < mon dossier > et je peux en changer manuellement les droits.

Tout le monde veut me diriger dans la bonne direction.

Répondre

6

Donc la réponse est double. Tout d'abord un sous-dossier a été créé avant que les autorisations ont été définies sur le dossier et que je devais ou dans un autre indicateur sur les autorisations pour que les dossiers et les fichiers héritent des autorisations.

public static void SetPermissions(string dir) 
     { 
      DirectoryInfo info = new DirectoryInfo(dir); 
      DirectorySecurity ds = info.GetAccessControl();    
      ds.AddAccessRule(new FileSystemAccessRule(@"BUILTIN\Users", 
          FileSystemRights.FullControl, 
          InheritanceFlags.ObjectInherit | 
          InheritanceFlags.ContainerInherit, 
          PropagationFlags.None, 
          AccessControlType.Allow)); 
      info.SetAccessControl(ds);    
     } 

Ensuite, tout semble fonctionner.

1

Cela peut être une question stupide, mais avez-vous essayé d'effectuer la même action manuellement (par exemple en utilisant Explorer)? Vista possède des répertoires que même les utilisateurs du groupe Administrateurs ne peuvent pas modifier sans prendre d'autres étapes. Je pense qu'il y a deux étapes à suivre en premier. Tout d'abord, utilisez Explorer pour effectuer la même modification que celle que vous essayez de faire dans votre code. Si cela échoue, résolvez le problème. Ensuite, testez votre code sur un répertoire que vous avez créé sous votre propre dossier utilisateur. Vous ne devriez pas avoir besoin de privilèges d'administration pour faire cela; le compte connecté doit être en mesure de modifier la liste de contrôle d'accès sur les dossiers par ex. c: \ Users \ yourname \ documents.

Je passerais également par le code dans le débogueur et regarder l'objet "ds" juste avant votre appel à SetAccessControl. Cela pourrait vous montrer quelque chose d'inattendu pour vous mettre sur le bon chemin.

+0

Oui Je peux créer modifier les droits d'accès au dossier manuellement. – Erin

Questions connexes