2010-09-20 7 views
4

Je rencontre un problème lors de la création d'un répertoire avec des autorisations spécifiques.Créer un répertoire et donner un problème FullControl à l'utilisateur

 //Make sure Tools directory exists 
     DirectoryInfo oMyDirectoryInfo = new DirectoryInfo(oInstance.szToolsPath); 
     if (!oMyDirectoryInfo.Exists) 
     { 
      oMyDirectoryInfo.Create(); 
      DirectorySecurity oDirectorySecurity = oMyDirectoryInfo.GetAccessControl(); 
      oDirectorySecurity.AddAccessRule(new FileSystemAccessRule((Settings.Default.LoginDomain + "\\" + Settings.Default.LoginUsername), FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AccessControlType.Allow)); 
      oMyDirectoryInfo.SetAccessControl(oDirectorySecurity); 
     } 

Maintenant, cela crée le répertoire et je peux voir que le Login a été ajouté à l'onglet de sécurité. Toutefois, lorsque j'emprunte l'identité et que j'essaie de copier des fichiers dans ce répertoire, j'obtiens une exception non autorisée. Je peux créer un fichier (pas de données), je peux créer un dossier mais je ne peux pas écrire des données dans les fichiers (mais j'ai réglé FullControl: /)

J'ai creusé plus loin dans les permissions via Windows et je vois qu'il s'applique à sous-dossiers mais je voudrais aussi mettre cela dans les fichiers. Comment est-ce que je fais ceci par le code?

C'est sur Windows 7

+0

Ce code est-il exécuté avec un compte d'administrateur avec le contrôle de compte d'utilisateur désactivé? –

+0

Oui UAC est désactivé – Oliver

Répondre

6

Lorsque vous créez votre FileSystemAccessRule, vous spécifiez InheritanceFlags.ContainerInherit. Cela propage le masque à l'enfant conteneurs. Si vous souhaitez appliquer aux objets de feuille (fichiers dans votre cas), vous devez spécifier InheritanceFlags.ObjectInherit, ou pour les deux,

InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit 
+0

Vous êtes génial !! Merci. – Oliver

0

Utilisez cette option pour ajouter la règle d'accès

string adminUserName = Environment.UserName; 
      DirectorySecurity dirService = Directory.GetAccessControl(directory + hexID); 
      FileSystemAccessRule fsa = new FileSystemAccessRule(adminUserName,FileSystemRights.FullControl, AccessControlType.Deny); 

      dirService.AddAccessRule(fsa);//add 
      Directory.SetAccessControl(directory + hexID, dirService); 

et utiliser cette option pour supprimer Règle d'accès

string adminUserName = Environment.UserName; 
      DirectorySecurity dirService = Directory.GetAccessControl(directory + hexID); 
      FileSystemAccessRule fsa = new FileSystemAccessRule(adminUserName, FileSystemRights.FullControl, AccessControlType.Deny); 

      dirService.RemoveAccessRule(fsa);//remove 
      Directory.SetAccessControl(directory + hexID, dirService); 
Questions connexes