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!