Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Microsoft VSS (Volumenschattenkopien) (https://www.delphipraxis.net/200051-microsoft-vss-volumenschattenkopien.html)

AScomp 14. Mär 2019 18:09

Microsoft VSS (Volumenschattenkopien)
 
Hallo zusammen,

in "Rathlevs Rummelkiste" findet sich u.a. der Quellcode zur Erstellung von Schattenkopien (VSS) mit Delphi:

http://www.rathlev-home.de/tools/progtools.html

Code:
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;
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:

---------------------------
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!

DieDolly 14. Mär 2019 18:23

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?

AScomp 14. Mär 2019 18:52

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.

DieDolly 14. Mär 2019 18:57

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]

AScomp 14. Mär 2019 19:20

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);

DieDolly 27. Mär 2020 23:55

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.

Aviator 28. Mär 2020 00:04

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.

DieDolly 28. Mär 2020 13:02

AW: Microsoft VSS (Volumenschattenkopien)
 
Also erzeugt man keine Schattenkopie einer einzelnen Datei sondern vom ganzen System so wie im Code oben?

Hobbycoder 28. Mär 2020 22:10

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.

DieDolly 29. Mär 2020 01:38

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 01:40 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz