2012-02-02 18 views
55

Lo strumento che sviluppo deve concedere i diritti di accesso "Controllo completo" a un file creato da esso. Deve essere letto, modificato e cancellato da tutti gli account di Windows e anche da possibili account futuri. Questo potrebbe essere raggiunto?Come concedere l'autorizzazione completa a un file creato dalla mia applicazione per TUTTI gli utenti?

So che posso provare questo per uno SPECIFIC_USER:

FileSystemAccessRule rule = new FileSystemAccessRule(SPECIFIC_USER, FileSystemRights.FullControl, AccessControlType.Allow); 
FileSecurity fSecurity = File.GetAccessControl(filePath); 
fSecurity.SetAccessRule(rule); 
File.SetAccessControl(filePath, fSecurity); 

Ma come faccio a permettere a tutti gli utenti? E anche possibili account futuri? Se l'ultima parte non è possibile, come fare per il primo requisito?

Grazie.

EDIT:

Questo è il codice che ha lavorato per me. Tratto dal link del rispondente.

private bool GrantAccess(string fullPath) 
{ 
    DirectoryInfo dInfo = new DirectoryInfo(fullPath); 
    DirectorySecurity dSecurity = dInfo.GetAccessControl(); 
    dSecurity.AddAccessRule(new FileSystemAccessRule("everyone", FileSystemRights.FullControl, 
                InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, 
                PropagationFlags.NoPropagateInherit, AccessControlType.Allow)); 
    dInfo.SetAccessControl(dSecurity); 
    return true; 
} 

Annotare la PropagationFlags.NoPropagateInherit che è richiesto (citato verso l'ultima nel link). Assicura il privilegio anche agli account futuri.

+16

Nota per le persone, non usare "tutti", invece usare 'nuova SecurityIdentifier (WellKnownSidType.WorldSid, null)', che restituisce un oggetto SecurityIdentifier. Tutti funzionano solo su installazioni di windows in inglese, l'altro metodo garantisce che sia compatibile con versioni in più lingue. –

+0

@trukin puoi renderlo una risposta? grazie – nawfal

+0

@nawfal: Sto avendo lo stesso problema, e ho bisogno di dare accesso alla mia cartella di installazione una volta installata l'applicazione, ma dove posso scrivere questo codice? –

risposta

96

Nota per le persone che utilizzano questo.

Quando si utilizzano stringhe letterali per FileSystemAccessRule, deve essere WellKnownSidType.WorldSid anziché "everyone".

Il motivo è perché esistono più linguaggi di finestra e tutti si applicano solo a quelli di EN, quindi per lo spagnolo potrebbe essere "Todos" (o qualcos'altro).

using System.Security.AccessControl; 
using System.Security.Principal; 
using System.IO; 

private void GrantAccess(string fullPath) 
{ 
    DirectoryInfo dInfo = new DirectoryInfo(fullPath); 
    DirectorySecurity dSecurity = dInfo.GetAccessControl(); 
    dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow)); 
    dInfo.SetAccessControl(dSecurity); 
} 
+0

Penso che questo fosse il modo migliore per consentire il pieno controllo .... – IremadzeArchil19910311

+0

Grazie mille .. ho lottato con la decompressione dei file e l'impostazione delle autorizzazioni per i file .mdf (perché ho avuto errori di sola lettura). Grazie! – CularBytes

+0

Posso chiedere lo scopo del valore restituito? – hypehuman

12

Sarà necessario dare il pieno controllo al gruppo "Tutti" sulla macchina. Trovato this post su MSDN che ne parla.

Spero che questo funzioni per voi.

+0

Grazie, ci vediamo. Questo garantisce l'accesso anche a conti futuri? – nawfal

+0

Grazie ha funzionato e garantisce l'accesso anche ai futuri account utente. Accetta la mia modifica in modo che gli altri sappiano cosa esattamente dovrebbe essere fatto. – nawfal

+0

Felice che abbia funzionato per te. –

Problemi correlati