Domanda

Sto cercando di impostare le autorizzazioni di una cartella e di tutti i suoi figli su un computer Vista. Il codice che ho finora è questo.

 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);            
        }

Tuttavia non funziona come mi aspetterei.
Anche se eseguo il codice come amministratore, non imposterai le autorizzazioni.

La cartella con cui sto lavorando si trova in C: \ ProgramData \ < la mia cartella > e posso modificare manualmente i diritti su di esso bene.

Qualcuno vuole indicarmi la giusta direzione.

È stato utile?

Soluzione

Quindi la risposta è duplice. Innanzitutto è stata creata una sottocartella prima che le autorizzazioni fossero impostate sulla cartella e avevo bisogno di o in un altro flag sulle autorizzazioni per renderlo in modo che sia le cartelle che i file ereditassero le autorizzazioni.

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);            
        }

Dopodiché tutto sembra funzionare.

Altri suggerimenti

Questa potrebbe essere una domanda stupida, ma hai provato a eseguire manualmente la stessa azione (ad es. utilizzando Explorer)? Vista ha alcune directory che nemmeno gli utenti del gruppo Administrators possono modificare senza prendere ulteriori passaggi. Penso che ci siano due passaggi che devi fare prima.

Per prima cosa, usa Explorer per apportare la stessa modifica che stai tentando di fare nel tuo codice. Se fallisce, risolvilo.

In secondo luogo, prova il tuo codice su una directory che hai creato nella tua cartella utente. Non dovresti aver bisogno dei privilegi di amministratore per farlo; l'account di accesso dovrebbe essere in grado di cambiare ACL su cartelle sotto ad es. C: \ Users \ nomeutente \ documents

.

Esaminerei anche il codice nel debugger e guarderei il " ds " oggetto appena prima della chiamata a SetAccessControl. Questo potrebbe mostrarti qualcosa di inaspettato per metterti sulla strada giusta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top