Abbrechen von VSS-Vorgängen
Abbruchereignisse können während eines Sicherungsvorgangs in einem der folgenden Fälle generiert werden:
- Ein Anfordernder generiert explizit ein Abort-Ereignis, indem er IVssBackupComponents::AbortBackupaufruft.
- Die Freeze- und Thaw-Ereignishandler eines Writers (CVssWriter::OnFreeze und CVssWriter::OnThaw) geben false zurück oder können in dem in CVssWriter::Initializeangegebenen Zeitfenster nicht abgeschlossen werden.
- Bei der Erstellung einer Schattenkopie nach dem PrepareForSnapshot-Ereignis tritt ein Fehler des Anbieters oder vss auf.
Abbrüche werden für Wiederherstellungsvorgänge nicht unterstützt.
Verarbeitung und Erstellung von Abbruchereignissen durch den Anforderer
Eine Instanz der IVSSBackupComponents-Schnittstelle kann nur für eine Sicherung verwendet werden. Wenn also bei der Verarbeitung einer Sicherung ein Fehler auftritt, empfiehlt es sich im Allgemeinen, die aktuelle Instanz freizugeben und neu zu starten.
Ein Anforderer sollte explizit signalisieren, dass er einen Sicherungsvorgang (mit IVssBackupComponents::AbortBackup)erst abbricht, nachdem die eigentliche Vorbereitung für eine Sicherung mit Writern oder die Erstellung einer Schattenkopie erfolgt ist.
Dies bedeutet, dass jedes Mal, wenn ein Anforderer einen Sicherungsvorgang beenden muss, nachdem er ein PrepareForBackup-Ereignis generiert hat, indem er IVssBackupComponents::P repareForBackupaufruft, IVssBackupComponents::AbortBackup aufruft und auf die Rückgabe wartet, bevor die aktuelle IVSSBackupComponents-Instanz freigegeben wird.
Wenn beispielsweise ein Writer einen Sicherungsvorgang verhindert hat, sollte ein Anforderer IVssBackupComponents::AbortBackup verwenden, um alle anderen Writer zu benachrichtigen, dass der Sicherungsvorgang nicht abgeschlossen wird.
Vor dem Aufrufen von PrepareForBackupoder wenn der Aufruf von PrepareForBackup fehlschlägt, kann ein Anforderer die aktuelle Instanz der IVSSBackupComponents-Schnittstelle freigeben, ohne ein Abort-Ereignis generieren zu müssen.
Wenn beispielsweise die aktuelle Instanz von IVSSBackupComponents nur zum Abrufen von Informationen verwendet wird, indem IVssBackupComponents::GatherWriterMetadata aufgerufen und ein Identify-Ereignis generiert wird, kann die Instanz von IVSSBackupComponents einfach freigegeben werden, sobald Informationen zurückgegeben wurden.
Ein Anforderer generiert eine Reihe von Ereignissen (PrepareForSnapshot, Freeze, Thawund PostSnapshot), wenn er IVssBackupComponents::D oSnapshotSet aufruft. Bei der Behandlung der Freeze- und Thaw-Ereignisse schlägt ein Writer möglicherweise fehl und kann selbst ein Abbruchereignis generieren. Wenn die Ereignisse PrepareForSnapshot und PostSnapshot nicht behandelt werden, wird kein Abbruchereignis generiert.
Es ist nicht immer möglich, dass ein Anforderer weiß, ob ein Abbruchereignis generiert wurde, wenn IVssBackupComponents::D oSnapshotSet einen Fehler angibt. Daher sollte ein Anforderer, der einen Sicherungsvorgang beenden muss, weil der Status von IVssBackupComponents::D oSnapshotSet darauf hinweist, dass ein Problem weiterhin IVssBackupComponents::AbortBackupaufrufen sollte.
Wenn ein Anfordernder IVssBackupComponents::AbortBackupaufgerufen hat, ist es nicht erforderlich, IVssBackupComponents::BackupComplete aufzurufen, bevor eine Instanz von IVSSBackupComponentsfreigegeben wird.
Writer-Behandlung und -Erstellung von Abbruchereignissen
Wie bereits erwähnt, kann ein Writer ein Abbruchereignis von einem Anforderer empfangen, oder der Anbieter kann ein Ereignis selbst auslösen. Außerdem ist es möglich, dass ein Writer unter bestimmten Umständen mehrere Abbruchereignisse empfängt. Writer-Entwickler sollten jede Implementierung von CVssWriter::OnAbort unter Berücksichtigung dieses Themas programmieren.
Bei der Behandlung eines Abbruchereignisses sollte ein Writer versuchen, den von ihm verwalteten Prozess in den normalen Ausführungszustand wiederherzustellen und fehlerbehandlung und Protokollierung durchzuführen.
Dies kann bedeuten, dass eine Implementierung von CVssWriter::OnAbort möglicherweise viele, wenn nicht alle Aufgaben derselben Aufgaben ausführen muss wie der Thaw-Ereignishandler (CVssWriter::OnThaw) und der PostSnapshot-Ereignishandler (CVssWriter::OnPostSnapshot), und diese Handler können innerhalb von CVssWriter::OnAbort aufgerufen werden.