Das von mir entwickelte Tool muss einer von ihm erstellten Datei Zugriffsrechte "Vollzugriff" gewähren. Es muss von allen Windows-Konten und sogar von möglichen zukünftigen Konten gelesen, geändert und gelöscht werden. Könnte dies erreicht werden?
Ich weiß, dass ich dies für einen SPECIFIC_USER versuchen kann:
FileSystemAccessRule rule = new FileSystemAccessRule(SPECIFIC_USER, FileSystemRights.FullControl, AccessControlType.Allow);
FileSecurity fSecurity = File.GetAccessControl(filePath);
fSecurity.SetAccessRule(rule);
File.SetAccessControl(filePath, fSecurity);
Aber wie kann ich es allen Benutzern gewähren? Und sogar mögliche zukünftige Konten? Wenn der letzte Teil nicht möglich ist, wie geht man dann mit der ersten Anforderung um?
Vielen Dank.
BEARBEITEN:
Dies ist der Code, der für mich funktioniert hat. Entnommen aus dem Link des Antwortenden.
private bool 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);
return true;
}
Beachten Sie, PropagationFlags.NoPropagateInherit
was erforderlich ist (gegenüber dem letzten im Link erwähnt). Es gewährt auch zukünftigen Konten Privilegien.
quelle
new SecurityIdentifier(WellKnownSidType.WorldSid, null)
ein SecurityIdentifier-Objekt. Jeder arbeitet nur an englischen Windows-Installationen. Mit der anderen Methode wird sichergestellt, dass es mit mehreren Sprachversionen kompatibel ist.Antworten:
Hinweis für Benutzer.
Wenn Sie wörtliche Zeichenfolgen für das verwenden
FileSystemAccessRule
, sollte diesWellKnownSidType.WorldSid
anstelle von sein"everyone"
.Der Grund dafür ist, dass es mehrere Fenstersprachen gibt und jeder nur für EN-Sprachen gilt. Für Spanisch könnte es also "Todos" (oder etwas anderes) sein.
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); }
quelle
Sie müssen der Gruppe "Jeder" auf dem Computer die volle Kontrolle geben. Fand diesen Beitrag auf MSDN, der darüber spricht.
Hoffe das funktioniert bei dir.
quelle