Ordner kopieren inkl. allen Rechten

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Ordner kopieren inkl. allen Rechten

    Hallo zusammen,

    ich habe ein Problem: ein kleines Tool soll Vorlagen von Ordern kopieren und dabei noch ein paar Loops für Spezialkopien etc. machen.
    Dafür nutze ich grundsätzlich FileCopy und das klappt auch alles absolut einwandfrei (Zielordner wird erstellt, Ordner und Unterordner werden kopiert).
    ABER: die nicht-vererbten Berechtigungen des Ordners sind weg (die vererbten werden korrekt angelegt).
    Es ist aber matchentscheidend, dass die nicht vererbten Rechte bei der Kopie erhalten bleiben.

    Wie kann ich das lösen?
    Eine möglichkeit wäre RoboCopy, da kriege ich aber beim Test Permission-Fehler.
    Mit xcopy klappts insofern nicht, als dass xcopy die Pfade jeweils in " " stehen haben will. In VB mit Process.Start("xcopy ...") aufgerufen muss ich ja zwangsweise ' benutzten, damit sich das nicht ins Gehege kommt. Und dann klappts wieder nicht ;).

    Um hilfreiche Tipps wäre ich froh... bin etwas ratlos ;)

    Danke und Gruss,
    KlyX
    Chris' Weblog - Mein Blog rund um Vieles :D
    Du kannst xcopy immernoch mit " aufrufen.

    VB.NET-Quellcode

    1. dim x as String = "Das ist ein Anführungszeichen:" & System.Convert.ToChar(34)

    Mit System.Convert.ToChar(34) kannst du Anführungszeichen in einen String einfügen.
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Mokki schrieb:

    Anführungszeichen in einen String einfügen
    geht so:

    VB.NET-Quellcode

    1. MessageBox.Show("""")
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo zusammen,

    danke erstmal für euer Feedback.
    Leider komme ich damit nur begrenzt weiter.

    @Rod: das klappt zwar so wie du schreibst, aber nur dann wenn die beiden anzuzeigenden Anführungszeichen direkt hintereinander sind. Ansonsten klappt das nicht z.B. bei Strings
    @Mokki: Jap, das klappt... ABER

    nun wirds aber nun interessant. Der Pfad wird nicht gefunden:

    VB.NET-Quellcode

    1. Dim prozess As New ProcessStartInfo("robocopy " & System.Convert.ToChar(34) & "hiermeinquellpfad" & System.Convert.ToChar(34) & " " & System.Convert.ToChar(34) & "hiermeinzielpfad" & System.Convert.ToChar(34) & " /e /copyall")


    Ich hab mir den komplett generierten Befehl in die Zwischenablage schreiben lassen und dann in der cmd ausgeführt. Erste Feststellung: mist, zu wenig Rechte wenn ich es so ausführe.
    Sobald ich cmd als Admin ausführe funktioniert der komplett generierte Befehl einwandfrei.
    Na gut, dachte ich mir, dann führ ich halt den Prozess per runas aus (im Notfall mit Bestätigung durch den User)

    Also vor die Ausführung

    VB.NET-Quellcode

    1. info.UseShellExecute = True
    2. info.Verb = "runas"
    3. Process.Start(prozess)


    Leider hab ich immer noch kein Glück. Die generische Fehlermeldung (Datei/Ordner kann nicht gefunden werden) kommt weiterhin und es poppt auch keine UAC oder so auf.

    Langsam nervt mich das.
    Es kann doch nicht so schwer sein, einen Prozess erfolgreich mit erweiterten Rechten zu starten, damit ich die Ordner einfach mit allen bestehenden Rechten kopieren kann...

    Habt ihr ne Idee, was ich hier falsch mache?

    Gruss,
    KlyX
    Chris' Weblog - Mein Blog rund um Vieles :D
    Also ich hab jetzt nen bisle rumgesucht und bin auf das gestoßen: stackoverflow.com/questions/17…exe-with-admin-priviliges
    Daraus hab ich jetzt das zusammengebaut:

    VB.NET-Quellcode

    1. Dim process As New Process()
    2. process.StartInfo.FileName = "cmd.exe"
    3. process.StartInfo.Arguments = "/c xcopy ""Pfad\zur\Datei\x.txt"" ""Ziel\Pfad\"""
    4. process.StartInfo.Verb = "runas"
    5. process.StartInfo.UseShellExecute = True
    6. process.Start()

    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Hey Mokki,

    sorry für die späte Antwort.
    Hab das nun grad ausprobiert. Klappt einwandfrei :) Hab nun noch die restlichen Argumente für den xcopy Befehl übernommen.
    Danke erstmal - hoffe das nun auch der Rest klappt und alle Recht übernommen werden wie sie sollten =)

    Gruss,
    KlyX
    Chris' Weblog - Mein Blog rund um Vieles :D

    KlyX schrieb:

    Ansonsten klappt das nicht z.B. bei Strings
    Das ist falsch.
    Wenn Du in einem String 2 Apostrophen hinter einander schreibst, werden sie in der Ausgabe als Apostroph dargestellt:

    VB.NET-Quellcode

    1. Dim path = "robocopy ""hiermeinquellpfad"" ""hiermeinzielpfad"" /e /copyall"
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!