![]() |
AW: Volume Shadow Copy Service
ich brauche das nicht in eine Klasse packen, weil es da ja schon drin ist.
vss_util.pas Ein großer Teil der VssToolkit.pas ist doch auswerten der Kommandozeilenparameter. Letztlich benötigt du lediglich Initialize() GatherWriterMetadata GatherWriterStatus ListWriterStatus ListWriteMetadata QuerySnapshotSet QuerySnapshotProperties DeleteAllSnapshots DeleteSnapshotSet DeleteSnapshot CreateSnapshotSet Das sind die Methoden aus der vss_util, die du auch im Source von VssToolkit viederfindest. Dort sind doch alle Funktionen schön in einer Case-Anweisung demonstriert. |
AW: Volume Shadow Copy Service
Liste der Anhänge anzeigen (Anzahl: 2)
Nachfolgend ein Update mit einigen Fehlerkorrekturen und Ergänzungen.
|
AW: Volume Shadow Copy Service
Liste der Anhänge anzeigen (Anzahl: 2)
Hier ein Beispiel, wie man die VSS-Routinen in ein eigenes Programm einbinden kann:
Code:
Im Anhang gibt es außerdem eine aktualisierte Version des Programms.
...
procedure ShowVssStatus (const AStatus : string); begin ... end; ... VssThread:=CreateVssThread(Drive,true); with VssThread do begin LogFilename:=TempDir+'VssLog.txt'; WriteLog:=true; OnStatusMessage:=ShowVssStatus; Resume; WriteLineToLog('Creating a Volume Shadow Copy: '+DateTimeToStr(Now)); repeat Sleep(1); Application.ProcessMessages; until Done; if Success then begin SaveBackupComponentsDocument(TempDir+'VssBackupDoc.xml'); SourceDrv:=ShadowDeviceName; end else begin WriteLineToLog(sLineBreak+'Snapshot creation failed'); FreeAndNil(VssThread); SourceDrv:=Drive; end; end; ... // Backup or similar action ... if assigned(VssThread) then begin try VssThread.DeleteShadowCopy; finally FreeAndNil(VssThread); end; end; ... |
AW: Volume Shadow Copy Service
Wie verwendet man diese Unit wenn man eine Datei kopieren möchte die gesperrt und in Benutzung ist? Oder ist vss für sowas gar nicht gedacht.
|
AW: Volume Shadow Copy Service
Wenn VSS diese Datei aufbekommt, während sie gesperrt/geöffnet ist, dann hättest du eventuell eine halbe/korrupte Datei.
Im Allgemeinen macht man mit VSS die Dateien das Volume vorher auf, wobei eine "Kopie" ("Session" in DB-Sprache) erzeugt wird, mit der man weiterarbeitet. Werden Dateien währenddessen nun geöffnet/geändert, dann erstellt der VSS-FilterTreiber von diesen Dateien eine Kopie, mit dener die Andere weitergearbeiten, während in der VSS-Session du in Ruhe mit dem alten Datei-Stand weiterarbeiten kannst. Es gibt auch Transacted-Dateifunktionen (ala ![]() Eventuell hilft auch die alte Backup-API. ![]() (spaßig ist nur, dass man dort die Dateien im Roh-Format bekommt, wenn sie verschlüsselt/komprimiert/sparsed sind) |
AW: Volume Shadow Copy Service
Verstehe ich das richtig dass wenn man den Code oben von kopernikus nimmt, in einen TTHread packt, den Thread erzeugt und dann eine gesperrte Datei kopieren möchte, diese gesperrte Datei aus der Shadow Copy kopiert wird welches angelegt wurde? Verwendet man dann trotzdem die ganz normalen WinAPI Aufrufe wie CopyFile?
|
AW: Volume Shadow Copy Service
Vielleicht hilft auch das weiter:
![]() |
AW: Volume Shadow Copy Service
Wie es aussieht verstehe ich das nicht. Ich rufe
Code:
auf und dann?
VsToolkit.exe C:\
|
AW: Volume Shadow Copy Service
Zitat:
Zitat:
C reicht als Drive nicht. Muss C:\ sein. Funktioniert jetzt. Eine Frage zur Funktion noch. Ich habe nur Delphi Starter. Wenn ich eine 32 Bit-Anwendung mit dem VSS erstelle, kann ich das auch auf einem 64 Bit Windows benutzen oder muss ich dafür erst Delphi Pro haben? |
AW: Volume Shadow Copy Service
Ist das Thema noch aktiv?
habe nämlich zur Zeit auch das Problem, dass beim CreateVssThread die Fehlermeldung "ERROR: COM call "CoInitializeSecurity" failed. (<Unknown error code>)." kommt. Genauer gesagt kommt der Fehler in der VssUtil Zeile 2431
Delphi-Quellcode:
.
hr:=InitSecurity
Kompilieren ist keine Problem. Mein Code-Ausschnitt:
Delphi-Quellcode:
Ziel ist es, innerhalb eines Thread eine Datei, welche aktuell geöffnet ist, zu kopieren,
.
. . VssThread:=CreateVssThread(Copy(FSourceFile, 1, 2), True); VssThread.LogFileName:='c:\Transfer\vsslog.txt'; VssThread.WriteLog:=True; VssThread.OnStatusMessage:=VssStatusMessage; DoLogMessage('Create Snapshot...'); repeat FEvent.ResetEvent; FEvent.WaitFor(100); until VssThread.Done; if VssThread.Success then begin DoLogMessage('Create Snapshot successfully'); end else begin DoLogMessage('Create Snapshot failed'); end; finally if Assigned(VssThread) then try VssThread.DeleteShadowCopy; finally FreeAndNil(VssThread); end; end; Ja, ich habe mein Programm mit "Als Administrator ausführen" gestartet. Und über die Eingabeaufforderung mit VssAdmin geht's. (Windows 10 Pro Version 1709) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 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-2025 by Thomas Breitkreuz