![]() |
Volume Shadow Copy Service
Liste der Anhänge anzeigen (Anzahl: 2)
Da nirgendwo eine aktuelle Konvertierung der C++-Header für den Volume Shadow Copy Service für Delphi zu finden war, habe ich mich selbst daran gemacht. Basis waren die Header Dateien aus dem Microsoft Software Developement Kit für Windows 7. Dort findet man außerdem ein Beispielprogramm vshadow.exe, das die Verwendung erläutert. Ich habe es ebenfalls nach Delphi konvertiert. Das Ergebnis sind eine Unit mit den erforderlichen Funktionen und Objekten und ein kleines Konsolenprogramm, mit dem man das Ganze testen kann.
Das Programm kann sowohl für 32- als auch für 64-Bit-Windowssysteme kompiliert werden (erfordert mindestens Delpi-XE2). Alle Quelltexte befinden sich in der angehängten Zip-Datei Vss-s.zip: VssApi.pas, VssUtils und VsToolkit.dpr. Die Zip-Datei VsToolkit.zip enthält die ausführbaren Exe-Dateien und eine kurze Anleitung. |
AW: Volume Shadow Copy Service
|
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)
Ein aktuelles Update mit einigen Fehlerkorrekturen (u.a. für Windows 10).
|
AW: Volume Shadow Copy Service
Vielen Dank für Dein Update!
Ich verwende aktuell eine eigene Übersetzung, aber die ist längst nicht so vollständig, daher hatte ich Deinen Thread hier schon abonniert, als ich ihn das erste Mal sah, komme aber erst jetzt dazu, zu danken! Werde das sicher als Nachschlagmöglichkeit nutzen, wenn ich daran bin, meinen Code weiter für FreePascal fit zu machen. |
AW: Volume Shadow Copy Service
Wie kann denn ein eigener VSS Writer implementiert werden? Laut Doku muss von der abstrakten Klasse CVssWriter geerbt werden, nur ich hab da grad keine Idee wie das in Delphi funktioniert, falls überhaupt.
![]() Muss ich dazu die vssapi.lib in obj Dateien überführen? |
AW: Volume Shadow Copy Service
Darf ich eine dumme Frage stellen? Wie benutzt man das Toolkit wenn ich sagen wir mal eine Datei welche gerade benutzt wird kopieren möchte?
Ich versuche aktuell einen anderen Code zu benutzen aber da bekomme ich den Fehler Zitat:
Zitat:
Zitat:
|
AW: Volume Shadow Copy Service
Zitat:
![]() Zitat:
Zitat:
( billige Lösung: mal mit Administratorrechten ausführen? ) |
AW: Volume Shadow Copy Service
[deleted]
|
AW: Volume Shadow Copy Service
Liste der Anhänge anzeigen (Anzahl: 1)
Der von mir verwendete Code befindet sich im Anhang. Habe das hier gefunden
![]() |
AW: Volume Shadow Copy Service
VSToolkit funktioniert unter Windows 10, Version 1607 nicht mehr.
|
AW: Volume Shadow Copy Service
Liste der Anhänge anzeigen (Anzahl: 2)
Die aktuelle Version von VsToolkit funktioniert auch unter Windows 10 Vers. 1607. Wichtig sind diese Voraussetzungen:
|
AW: Volume Shadow Copy Service
Zitat:
Oder es reicht auch ein Adminkonto ohne "Als Admin", wenn dort die Rechte nicht durch das UAC beschränkt werden, aber nur deswegen würde ich nicht gleich das UAC deaktivieren. |
AW: Volume Shadow Copy Service
Hallo,
vielen Dank fürs Bereitstellen. Könnte jemand auch mal erläutern was für gute Sachen mit dem Volume Shadow Kopie machen kann, sprich reele Anwendungsbeipiele? lg, jus |
AW: Volume Shadow Copy Service
Man kann damit Dateien welche in Benutzung sind trotzdem kopieren (glaube ich).
Hat der Anwender aber die Systemwiederherstellung deaktiviert, bringt auch VSS nix mehr (glaube ich). VSS bedient sich nur alter Kopien der Dateien. Da wird nix Sekundengenau-aktuelels kopiert (glaube ich). |
AW: Volume Shadow Copy Service
Wenn ich den VSS richtig verstanden hatte, dann ist mir so, als wenn man das mit einer Transaktion vergleichen kann.
Du startest eine Sitzung im VSS und bei späteren Zugriffen sind alle Dateien in dem Zustand, wie zu Beginn. Viele Backupprogramme arbeiten so, wen sie Live-Systeme backupen, damit am Ende immer ein "konsistenter" Datenbestand herscht, auch wenn jemand zwischendrin irgendwelche Dateien verändert. Dachte daher, dass bei späteren Schreibzugriffen, also während der Aktion, sowas wie ein Copy-on-Write abläuft, wo geänderte Dateien nicht das "Original" überschreiben, sondern eine Kopie ändern. |
AW: Volume Shadow Copy Service
Wenn ich die Quellen selbst übersetze und das ganze als Admin unter Windows 10 ausführe kommt
Exception EOleSysError in Modul VsToolkit.exe bei 000000000014A621. ERROR : COM call "CoInitializeSecurity" failed. (<Unknown error code>). Woran kann das liegen? Die mitgelieferte EXE funktioniert. |
AW: Volume Shadow Copy Service
Ich habs bis heute auch nicht gebacken bekommen das zum Rennen zu bringen.
Gibt es denn nirgendwo ein funktionierendes Beispiel-Projekt? |
AW: Volume Shadow Copy Service
Was man bei VSS noch beachten sollte ist:
- Wenn man Datenbanken von z.B. einem MS-SQL-Server sichern möchte, die VSS-Writer benachrichtigen sollte, bzw. wenn eben diese nicht möchte, dass diese auch nicht benachrichtigt werden sollen (also nur wenn man auch wirklich die DB sichern/kopieren will) - Dass, sollte man eben ein Backup von einer Datenbank gemacht haben die VSS-Writer nutzt, diese über ein vollständiges Backup benachrichtig wird. Dann wird das Transaktionslog abgeschnitten, damit eine Konsistenz der Daten auch bei einem Restore sichergestellt werden kann. Alternativ könnte man sicherlich auch den entsprechenden Dienst z.b. eines Exchangeservers stoppen. Das hätte aber den Nachteil, dass a) die User damit nicht mehr arbeiten können und b) der Server nicht weiß, dass ein vollständiges Backup der Daten erfolgt ist, und somit die Transaktionslogs weiterhin anwachsen. |
AW: Volume Shadow Copy Service
Gibt es auch Infos dazu wie man den Code hier zum Rennen bekommt? :stupid:
|
AW: Volume Shadow Copy Service
Das ist doch der Source für das VSS-Toolkit bei. Läuft der bei dir nicht?
|
AW: Volume Shadow Copy Service
Zitat:
|
AW: Volume Shadow Copy Service
Und welchen Fehler bekommst du? Oder meldet dein Delphi jetzt nur "Geht nicht"?
|
AW: Volume Shadow Copy Service
|
AW: Volume Shadow Copy Service
Sorry, den Beitrag hatte ich überlesen.
Läuft bei mir ohne Fehler. Sowohl als 32-Bit als auch als 64-bit (natürlich nur als Administrator). mit welchen Optionen startest du es denn? Einzig die Unit FileUtils habe ich gegen JclDateUtils getauscht, weil er die nicht gefunden hat. |
AW: Volume Shadow Copy Service
Unter Windows 10?
|
AW: Volume Shadow Copy Service
Ja.
|
AW: Volume Shadow Copy Service
Zitat:
Gibt es nichts Einfacheres wie man VSS nutzen kann? Ein simples Beispielprojekt welches auch Sinn ergibt? |
AW: Volume Shadow Copy Service
Hm...noch einfacher. Sind doch nur 300 Zeilen im Programm.
Pack dir das doch in eine Klasse, dann ist es noch einfacher zu händeln. Was deine AV's angeht. Ich könnte dir mal die 32 oder 64-Bit-Exe von mir kompiliert schicken. Wenn die geht, liegt am Kompilat. Oder, was mir grad noch einfällt, manche Backupprogramm z.B. Acronis, installieren ihren eigenen VSS-Treiber und biegen irgendwas am Windows rum, dass das Hauseigene VSS nicht mehr funktioniert. Die verursachen dann bei sowas auch Fehler. Das das nicht sein muss zeigt Drivesnapshot. |
AW: Volume Shadow Copy Service
Wäre das viel Arbeit wenn du das in eine Klasse packst und hier anbietest?
Ein Kompilat kannst du mir schicken. Habe Win7Home x64 |
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 10:35 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