![]() |
Microsoft VSS (Volumenschattenkopien)
Hallo zusammen,
in "Rathlevs Rummelkiste" findet sich u.a. der Quellcode zur Erstellung von Schattenkopien (VSS) mit Delphi: ![]()
Code:
Ich habe den Quellcode unter Delphi 10 auch problemlos zum Laufen gebracht. Nicht so aber unter Delphi XE. Das Problem ist, dass die Funktion InitializeForBackup einen Fehler wirft:
function CreateSnapshot(): Boolean;
var VssThread: TVssThread; sDeviceName: String; begin result := false; try try VssThread := CreateVssThread('C:\', true); with VssThread do begin LogFilename := 'VssLog.txt'; WriteLog:=true; //OnStatusMessage:=ShowVssStatus; Resume; WriteLineToLog('Creating a Volume Shadow Copy: '+DateTimeToStr(Now)); repeat Sleep(10); Application.ProcessMessages; until Done; if Success then begin SaveBackupComponentsDocument('VssBackupDoc.xml'); sDeviceName := ShadowDeviceName; end else begin WriteLineToLog(sLineBreak+'Snapshot creation failed'); FreeAndNil(VssThread); exit; end; end; except exit; end; result := true; finally if assigned(VssThread) then begin try VssThread.DeleteShadowCopy; finally FreeAndNil(VssThread); end; end; end; end; --------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt Project1.exe ist eine Exception der Klasse EOleSysError mit der Meldung 'TVolumeShadowCopy.Initialize:VssBackupComponents. InitializeForBackup (VSS: an unexpected error was encountered)' aufgetreten. --------------------------- Das liegt wohl daran, dass ich unter Delphi XE eine 32 Bit-Anwendung erstelle und versuche, von einem 64 Bit-System einen Snapshot zu erstellen. Ist das generell nicht möglich oder habe ich anderswo einen Fehler? Ich müsste doch eigentlich auch aus einer 32 Bit-Anwendung heraus einen Snapshot erstellen können! Vielen Dank! |
AW: Microsoft VSS (Volumenschattenkopien)
Ich habe nur eine Frage zu dieser Thematik. Helfen kann ich nicht.
Kopiert man damit eine Datei die in Benutzung ist und sonst nicht kopiert werden kann? |
AW: Microsoft VSS (Volumenschattenkopien)
Prinzipiell ja. Du erstellst damit eine konsistente Schattenkopie der Datei, sofern das möglich ist.
Diese kannst du dann öffnen und weiterverarbeiten. Oder eben kopieren. |
AW: Microsoft VSS (Volumenschattenkopien)
Vielleicht sehe ich das gerade wegen der Formatierung nicht. Aber wo steht geschrieben welche Datei man verarbeitet?
[letzte Frage, danach bin ich ruhig] |
AW: Microsoft VSS (Volumenschattenkopien)
Meine Funktion ist nur eine Testfunktion. Sie verarbeitet noch nichts, sondern setzt nur das Result der Funktion true, wenn der Snapshot korrekt erstellt worden ist.
Wenn du eine exklusiv geöffnete Datei kopieren möchtest, musst du quasi die Schattenkopie der Datei aus dem Snapshot als Quelldatei angegeben. Das sieht dann ungefähr so aus: CopyFile('\\?\GLOBALROOT\Device\HarddiskVolumeShad owCopy1\programs\outlook\outlook.pst', 'C:\destination\outlook.pst', true); |
AW: Microsoft VSS (Volumenschattenkopien)
Nochmal eine Frage hierzu weil ich das bisher noch nicht kapiert habe und man nirgendwo ein richtiges Beispiel findet.
Wie würde diese Funktion denn aussehen, wenn ich eine Schattenkopie der Datei C:\1\2.txt erstellen möchte? Oder sagt man einfach, man erstellt einen Snapshot und der enthält ALLE Dateien des gesamten Systems? Ich wäre über ein Beispiel dankbar. |
AW: Microsoft VSS (Volumenschattenkopien)
Ich sag es mal so: Sinn einer Schattenkopie ist es eigentlich, das gesamte System mit allen Services (z.B. MSSQL-Datenbanken) auf einen konsistenten Zustand zu bringen. Ob du dann in dem Moment eine einzelne Datei daraus abgreifen kannst, kann ich nicht sagen. Aber ich gehe einfach mal davon aus.
Alle Angaben ohne Gewähr. |
AW: Microsoft VSS (Volumenschattenkopien)
Also erzeugt man keine Schattenkopie einer einzelnen Datei sondern vom ganzen System so wie im Code oben?
|
AW: Microsoft VSS (Volumenschattenkopien)
Volumenschattenkopie heißt so, weil man damit eine Schattenkopie eines Volumen erstellt. Nicht eines Systems und nicht einer Datei.
Also z.B. C:, D:, oder aber auch von einer Systempartition. Ich meine mich aber erinnern zu können, dass man Dateien/Verzeichnisse ausklammern kann. Hab vor zwei oder drei Jahren mal sowas geschrieben, um im laufenden Betrieb VHD‘s zu kopieren. Müsste da noch mal reinschauen, wenn du es genau wissen willst. |
AW: Microsoft VSS (Volumenschattenkopien)
Man erstellt also eine Schattenkopie vom Laufwerk C und arbeitet danach ganz normal mit dem Laufwerk weiter?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz