none
Schreibgeschütze Ordner & Dateien RRS feed

  • Frage

  • (C# Forms)

    Hey,

    bei meinem derzeitigen kleinen Projekt zum Üben, kann ich mich in einer Verzeichnisherarchi bewegen, kopieren, Löschen etc. mittels Buttons.

    Soweit klappt auch alles, nur habe ich mittlerweile bemerkt das ich Problem bei zugriffen (ansehen, Löschen, ...) auf Schreibgeschütze Ordner & Datein habe.

    Ich arbeite mit "Directory.GetFileSystemEntries();".


    • Bearbeitet Kalicronic Samstag, 23. August 2014 23:27
    Samstag, 23. August 2014 23:27

Alle Antworten

  • Hallo,
    das von dir beschriebene Verhalten entspricht dem in der MSDN beschriebenen Standard.
    Dein Programm wird mit bestimmten Rechten gestartet, i.d.R. den die der Benutzer hat (ab Vista standardmäßig aber keine Adminrechte mehr). Wenn du nun also keinen Zugriff auf einen Ordner hast, wird entsprechend ein Fehler ausgelöst, eine Exception.

    Nun weiß ich nicht, was du genau machen willst. Wenn du einfach den Fehler abfangen willst, füge deinen Code in einen try...catch-Block ein:

    try{
      //Deinen Code einfügen, der eine Ausnahme auslösen könnte
    }
    catch(UnauthorizedAccessException ex)
    {
      MessageBox.Show("Ihnen Fehlen die Berechtigungen um den Vorgang auszuführen\n\n" + ex.Message);
    }
    catch(Exception ex){  
      MessageBox.Show("Unerwarteter Fehler:\n\n + ex.Message);
    }
    
    Du solltest wenn möglich immer nur die Exception abfangen, die du auch vermutest. Ein blindes abfangen aller Ausnahmen (über die du nichts weist) bringt oft weniger als das Programm abstürtzen zu lassen.


    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Samstag, 23. August 2014 23:50
    Moderator
  • Hey,

    ja ich hatte diesen abschnitt schon gefunden und gelesen nur dachte ich, wenn ich ja nun das Programm starte mit admin rechte müsste es dann doch Funktionieren. Tut es aber leider auch nicht. :(

    Denn Fehler abzufangen werde ich auf jedenfall einbauen, danke für den Tipp.

    Ich möchte ja trozdem in diese Ordner hinein. Als test habe ich natürlich auf meinem PC verschiedene Ordner und Dateien probiert und konnte dort z.B. nicht in "C:\Programme".Was ja doch

    Zum thema Löschen hatte ich dann einen Test Ordner angelegt und in auch vom Schreibschutz erlöst, aber selbst dann konnte ich ihn nicht Löschen.

    Sonntag, 24. August 2014 00:10
  • Hallo,
    wie oben geschrieben funktioniert das ab Vista nicht mehr. Es wurde damals als Sicherheuitsfeature eingebaut, das Programme nurnoch Adminrechte bekommen, wenn der Benutzer es auch weiß. Also entweder du startest deine Anwendung über einen Rechtsklick auf die Exe und dann Als Administrator ausführen oder du fügst ein Anwendungsmanifest hinzu.
    Das würde ich dir aber nicht empfehlen, da so nur Benutzer mit Adminrechten das Programm auch starten können. Der normale Nutzer hat dann keine Chance mehr.

    Auch geben dir die Adminrechte noch keine Rechte auf Alles. Du hast zwar die Rechte die Berechtigungen von allen Ordnern zu ändern, aber standardmäßig fehlen dir auch einige.
    Aber Ändern solltest du die Rechte sowieso nicht.

    Wenn du nur mit Adminrechten Debuggen willst, starte einfach Visual Studio als Admin. (Rechtsklick>Als Admin ausführen...). Das zu debuggende Programm erhält dann auch Adminrechte.


    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Sonntag, 24. August 2014 10:33
    Moderator
  • Also nochmal,

    Ich habe schon verstanden das es mit den adminrechten zusammenhängt, was ja sinnvoll ist.

    Nur habe ich das getestet mit Adminrechte, wie auch beschrieben, aber ein selbst erstellter Ordner will zum beispiel nicht gelöscht werden. Ein Word dokument wiederrum ja. Also irgendwo muss es da noch ein problemchen geben. :/

    Sonntag, 24. August 2014 10:46
  • Mache einen Rechtsklick auf den Ordner > Eigenschaften > Sicherheit > Erweitert > Effektiver Zugriff > Einen Benutzer auswählen > Deinen Benutzernamen eingeben (oder über Erweitert... > Jetzt suchen > deinen Benutzernamen auswählen > OK) > OK > Effektiven Zugriff anzeigen.
    Welche Berechtigungen hast du für den Ordner?
    Wiederhohle das ganze für die Benutzergruppe Administrator und poste das Ergebnis.

    Wichtig zum löschen ist die "Löschen" Berechtigung. Lässt sich der Ordner denn aus dem Windows Explorer löschen?

    IMHO verhalten sich die Operationen im Dateisystem exakt so wie die im Windows Explorer. Ein Berechtigungsproblem liegt also im Dateisystem und nicht in deinem Programm vor.


    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Sonntag, 24. August 2014 11:26
    Moderator
  • Also ich habe nachgeschaut welche berichtigungen vorhanden sind und auch das gemacht nach deiner anweisung, aber ich habe überall vollen zugriff.

    Ja aus dem Windows Explorer lässt er sich löschen.

    Ich werde das zusätzlich auch nochmal auf meinem Laptop testen.

    Sonntag, 24. August 2014 11:41