Dateirechte Administrator / Benutzer

deadline

Erfahrenes Mitglied
Hi,
ich habe schon seit längerem ein Problem mit Dateirechten.

Ausgangslage ist folgende:
Mein Programm legt beim Starten eine Datei an in der ein paar Sachen reingespeichert werden (ini). Wenn man das Programm als Administrator startet wird die Datei als Administrator angelegt und auch entsprechend die Rechte gesetzt (Administrator darf alles, Benutzer nur Lesen).
Wenn das Programm nun als Benutzer gestartet wird stürzt es ab, da es die Datei nicht bearbeiten kann.
Wenn man es zuerst als Benutzer startet, dann erhält der Benutzer auch die Rechte zum Schreiben.

Im Internet habe ich nur ein paar Dinge gefunden, die sich darauf beziehen, dass man die FileAccesList modifizieren soll. Geht das nicht irgendwie einfacher?

Grüße
Christian

Nachtrag: Ich verwende C# und Visual Studio 2010 (.Net 4)
 
Die Lösung mit den ACLs war doch einfacher als gedacht. Mein einziges Problem war: Jede Gruppe heißt in jeder Sprache anders (Users -> Benutzer, Domain-users -> Domänen-Benutzer).

Wie es sich gehört hier meine Lösung, falls noch jemand das Problem haben sollte:

Code:
public static void setUserWritePermission(string _fileName)
{
     try
     {

          string groupName = "";

          groupName = getNameFromSid( new SecurityIdentifier("S-1-5-32-545") );
                        

          FileSecurity fSecurity = File.GetAccessControl(_fileName);
          fSecurity.AddAccessRule(new FileSystemAccessRule(groupName, FileSystemRights.Modify, AccessControlType.Allow));
          File.SetAccessControl(_fileName, fSecurity);
     }
     catch (Exception ex)
     {

     }
}


Code:
public static string getNameFromSid(SecurityIdentifier sid)
{
                
     NTAccount ntAccount = (NTAccount)sid.Translate(typeof(NTAccount));
     return ntAccount.ToString();
}

Kurze Erklärung:

Jede Gruppe in Windows hat eine eindeutige ID. In meinem Fall habe ich die Gruppe Builtin\Users (S-1-5-32-545) genommen. Bei Domänen ist die Gruppe Domänen-Benutzer auch Mitglied dieser Gruppe, sodass die Domänen-Benutzer dadurch auch Schreibrechte bekommen.

Durch die Funktion getNameFromSid kann man den lokalisierten Namen der Gruppe erfragen und diesen String kann man wiederum in der AddAccessRule Funktion verwenden.

Ich hoffe das Snippet hilft jemandem, da ich schon länger danach gesucht habe. Bei Fragen einfach fragen =)

Grüße
Christian
 

Neue Beiträge

Zurück