AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Microsoft VSS (Volumenschattenkopien)

Ein Thema von AScomp · begonnen am 14. Mär 2019 · letzter Beitrag vom 14. Mär 2019
Antwort Antwort
AScomp

Registriert seit: 26. Okt 2002
Ort: Stuttgart
23 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
583 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
23 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
583 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
23 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
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf