emeriks
Goto Top

Robocopy über vb.net tut nicht, was es soll.

Hi,
habe ein Verständnisproblem beim Starten von Robocopy.exe aus einer VB.Net-Anwendung heraus.

1. Aufgabe ist, einen Ordner zu kopieren, für welchen der aktuelle Benutzer keine Rechte hat.
2. Der Benutzer ist auf dem System, wo die Anwendung läuft, und auf dem Server, wo die Daten liegen, Administrator mit Backup Operator Rechten
3. Ich habe eine Batch mit dem Robocopy-Kommando, um diesen Ordner incl. Sicherheitseinstellungen zu kopieren.
4. Starte ich diese Batch manuell in einer Cmd-Shell, dann wird der Ordner tadellos kopiert, incl. Sicherheitseinstellungen. Der Benutzer kann anschließend nicht auf den Kopie-Ordner zugreifen, wie es sein soll.
5. Starte ich dieselbe Batch aus meinem VB.net Programm heraus, dann meckert Robocopy, dass der Quell-Ordner nicht da wäre.
6. kapiere ich nicht! *frust*

Die Batch sieht so aus:

robocopy.exe "\\Server\Freigabe\QuellOrdner" "C:\Temp\Zielordner" /MIR /B /LEV:1 /COPY:DS /R:0 /W:0 /XF * /LOG:"C:\Temp\robocopy.log"  

Im Logfile steht dann:

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robustes Dateikopieren fr Windows                              
-------------------------------------------------------------------------------

  Gestartet: Tue Nov 19 16:24:32 2013

   Quelle : \\Server\Freigabe\QuellOrdner\
     Ziel : C:\Temp\Zielordner\

    Dateien : *.*
	    
Ausfhrbare Dateien : *
	    
  Optionen: *.* /S /E /COPY:DTS /PURGE /MIR /B /LEV:1 /R:0 /W:0 

------------------------------------------------------------------------------

2013/11/19 16:24:32 FEHLER 2 (0x00000002) Zugriff auf Quellverzeichnis \\Server\Freigabe\QuellOrdner\
Das System kann die angegebene Datei nicht finden.


Kann mir da jemand bitte helfen?

E.

Content-Key: 222394

Url: https://administrator.de/contentid/222394

Ausgedruckt am: 29.03.2024 um 11:03 Uhr

Mitglied: colinardo
colinardo 19.11.2013 aktualisiert um 17:32:26 Uhr
Goto Top
Hallo emeriks,
das sieht mir nach fehlenden Rechten auf der Freigabe aus, aber probier erst mal Robocopy direkt über Process.Start
auszuführen, anstatt über den Umweg der Batch:
Process.Start("robocopy.exe", "\\Server\Freigabe\QuellOrdner\ C:\Temp\Zielordner\ /MIR /B /LEV:1 /COPY:DS /R:0 /W:0 /XF * /LOG:C:\Temp\robocopy.log")  
Grüße Uwe
Mitglied: emeriks
emeriks 19.11.2013 um 17:34:50 Uhr
Goto Top
Hallo Uwe,
nee, Rechte kann doch nicht sein, wenn die Batch -manuell gestartet- arbeitet.
Ursprünglich habe ich die die Exe auch direkt gestartet, genau so, wie Dein Beispiel. Die Batch ist dann schon ein Verzweiflungsversuch von mir. Darüber konnte ich dann aber wenigstens Schreibfehler ausschließen, weil ich ja die funktionierende Batch 1:1 aus VB starte.
Der Start funktioniert auch. Robocopy schreibt jedesmal ein aktuelles Log.

E.
Mitglied: colinardo
colinardo 19.11.2013 um 17:37:50 Uhr
Goto Top
nee, Rechte kann doch nicht sein
kann doch, starte mal die EXE in der CMD-Shell und nicht via Doppelklick ...
du kannst Process.Start() auch Credentials mitgeben (http://msdn.microsoft.com/de-de/library/ed04yy3t%28v=vs.110%29.aspx)
Mitglied: emeriks
emeriks 19.11.2013 um 17:54:36 Uhr
Goto Top
Sorry, aber das schnalle ich jetzt nicht.

Meine Exe und die von mir gestartete cmd.exe bzw. die dann über die Batch gestartete robocopy.exe laufen doch alle in derselben Sitzung, mit dem selben Sitzungstoken. Also haben doch alle drei Prozesse dieselben Rechte?

Vielleicht noch ein Hinweis:
Das ganze soll unter Win2008 R2 laufen. Ich habe UAC ausgeschaltet. Wenn ich die cmd.exe manuell starte, dann steht in der Fensterleiste "Administrator: ...". Wenn ich die cmd.exe über VB starte, dann steht das auch "Administrator:....".

Wenn ich robocopy.exe aus VB starte und auf einen Ordner ansetze, wo ich Vollzugriff habe, dann meckert robocopy auch nicht, dass der Ordner nicht da wäre.
Ich vermute, dass muss etwas mit dem "/B" Schalter von Robocopy zu tun haben. Als wenn in dem aus VB heraus gestarteten Robocopy-Prozess das Backup Operator Privileg nicht aufrufbar wäre.

E.
Mitglied: colinardo
colinardo 19.11.2013 um 17:58:52 Uhr
Goto Top
Zitat von @emeriks:

Sorry, aber das schnalle ich jetzt nicht.

Meine Exe und die von mir gestartete cmd.exe bzw. die dann über die Batch gestartete robocopy.exe laufen doch alle in derselben Sitzung, mit dem selben Sitzungstoken. Also haben doch alle drei Prozesse dieselben Rechte?
Sicher, aber wenn du das nicht schreibst kann ich es nicht wissen face-wink , du könntest ja auch als anderer User angemeldet sein und die cmd mit dem Backup-User gestartet haben...
War halt ein Missverständnis...
Muss mal testen.
Mitglied: colinardo
colinardo 19.11.2013, aktualisiert am 20.11.2013 um 08:36:02 Uhr
Goto Top
hmmm kann das geschilderte Verhalten auf einem 2008R2 nicht nachvollziehen. Du sagst das es mit anderen Freigaben auf dem Server funktioniert ? und nur mit dieser Freigabe nicht ?
Mitglied: emeriks
emeriks 20.11.2013 um 08:57:15 Uhr
Goto Top
Nein, in der selben Freigabe ein anderer Ordner, wo ich Vollzugriff habe. Da geht es.
Und ich kann es für alle Ordner und Dateien in allen Freigaben, auf welche ich keinen Zugriff habe und auch nicht der Besitzer bin, reproduzieren.
Mitglied: emeriks
emeriks 20.11.2013 um 14:17:22 Uhr
Goto Top
Habe das jetzt noch eingrenzen können:
Dieses Problem tritt nur dann auf, wenn ich den Prozess-Start in einem neuen Thread ausführe.

Also:
- Anwendung starten und sofort die Routine ausführen -> geht
- Routine über Button auslösen --> geht
- Routine über einen Timer und von dort als neuen Thread gestartet --> geht nicht! Uuuups... Und was nu?
Mitglied: colinardo
colinardo 20.11.2013 um 14:23:13 Uhr
Goto Top
Zitat von @emeriks:
- Routine über einen Timer und von dort als neuen Thread gestartet --> geht nicht! Uuuups... Und was nu?
Im Thread die CurrentPrincipal-Eigenschaft festlegen oder http://stackoverflow.com/questions/2608194/how-do-i-start-a-thread-in-a ...

Grüße Uwe