AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Microsoft VSS (Volumenschattenkopien)

Ein Thema von AScomp · begonnen am 14. Mär 2019 · letzter Beitrag vom 30. Mär 2020
Antwort Antwort
Seite 1 von 2  1 2      
AScomp

Registriert seit: 26. Okt 2002
Ort: Stuttgart
28 Beiträge
 
Delphi XE Professional
 
#1

Microsoft VSS (Volumenschattenkopien)

  Alt 14. Mär 2019, 19:09
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!
Viele Grüße,

Andy Ströbel

Geändert von AScomp (14. Mär 2019 um 19:18 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#2

AW: Microsoft VSS (Volumenschattenkopien)

  Alt 14. Mär 2019, 19:23
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?
  Mit Zitat antworten Zitat
AScomp

Registriert seit: 26. Okt 2002
Ort: Stuttgart
28 Beiträge
 
Delphi XE Professional
 
#3

AW: Microsoft VSS (Volumenschattenkopien)

  Alt 14. Mär 2019, 19:52
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.
Viele Grüße,

Andy Ströbel
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#4

AW: Microsoft VSS (Volumenschattenkopien)

  Alt 14. Mär 2019, 19:57
Vielleicht sehe ich das gerade wegen der Formatierung nicht. Aber wo steht geschrieben welche Datei man verarbeitet?
[letzte Frage, danach bin ich ruhig]
  Mit Zitat antworten Zitat
AScomp

Registriert seit: 26. Okt 2002
Ort: Stuttgart
28 Beiträge
 
Delphi XE Professional
 
#5

AW: Microsoft VSS (Volumenschattenkopien)

  Alt 14. Mär 2019, 20:20
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);
Viele Grüße,

Andy Ströbel
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#6

AW: Microsoft VSS (Volumenschattenkopien)

  Alt 28. Mär 2020, 00:55
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.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Microsoft VSS (Volumenschattenkopien)

  Alt 28. Mär 2020, 01:04
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.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#8

AW: Microsoft VSS (Volumenschattenkopien)

  Alt 28. Mär 2020, 14:02
Also erzeugt man keine Schattenkopie einer einzelnen Datei sondern vom ganzen System so wie im Code oben?
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#9

AW: Microsoft VSS (Volumenschattenkopien)

  Alt 28. Mär 2020, 23:10
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.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#10

AW: Microsoft VSS (Volumenschattenkopien)

  Alt 29. Mär 2020, 03:38
Man erstellt also eine Schattenkopie vom Laufwerk C und arbeitet danach ganz normal mit dem Laufwerk weiter?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 Uhr.
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