中止 VSS 作業

下列任一情況下,可以在備份作業期間產生中止事件:

還原作業不支援中止。

要求者處理和建立中止事件

IVSSBackupComponents介面的實例只能用於一個備份,因此如果處理備份時發生錯誤,通常最好釋放目前的實例並重新開始。

要求者應該明確表示它正在中止備份作業, (使用 IVssBackupComponents::AbortBackup) 只有在實際準備備份、涉及寫入器或建立陰影複製時才會發生。

實際上,這表示每當要求者透過呼叫IVssBackupComponents::P repareForBackup來產生PrepareForBackup事件之後,它都應該呼叫IVssBackupComponents::AbortBackup並等候其傳回,再釋放目前的IVSSBackupComponents實例。

例如,如果寫入器已經執行備份作業,要求者應該使用 IVssBackupComponents::AbortBackup 來通知所有其他寫入器,備份作業將不會完成。

在呼叫 PrepareForBackup之前,或呼叫 PrepareForBackup 失敗之前,要求者可以釋放 IVSSBackupComponents 介面的目前實例,而不需要產生中止事件。

例如,如果目前的 IVSSBackupComponents 實例只用來透過呼叫 IVssBackupComponents::GatherWriterMetadata 並產生 Identify 事件來取得資訊,一旦資訊傳回 IVSSBackupComponents 的 實例即可直接釋放。

要求者會在呼叫IVssBackupComponents::D oSnapshotSet時產生一些事件 (PrepareForSnapshotFreezeThawPostSnapshot) 。 處理凍結和解除凍結事件時,寫入器可能會失敗,而且可以自行產生中止事件。 無法處理 PrepareForSnapshot 和 PostSnapshot 事件不會產生中止事件。

IVssBackupComponents::D oSnapshotSet 指出失敗時,要求者不一定會知道是否產生中止事件。 因此,需要終止備份作業的要求者,因為 IVssBackupComponents::D oSnapshotSet 的狀態表示問題仍應呼叫 IVssBackupComponents::AbortBackup

如果要求者已呼叫IVssBackupComponents::AbortBackup,則不需要在釋放IVSSBackupComponents實例之前呼叫IVssBackupComponents::BackupComplete

寫入器處理和建立中止事件

如先前所述,寫入器可以從要求者接收中止事件,或者提供者可以觸發一個本身。 此外,寫入器在某些情況下可能會接收多個中止事件。 寫入器開發人員應該以下列方式撰寫 CVssWriter::OnAbort 的任何實作程式碼。

在處理中止事件時,寫入器應該嘗試將它所管理的任何進程還原到其正常執行狀態,以及執行任何錯誤處理和記錄。

這可能表示 CVssWriter::OnAbort 的實作可能必須執行許多, 如果不是全部,則與 Thaw 事件處理常式相同的工作 (CVssWriter::OnThaw) 和 PostSnapshot 事件處理常式 (CVssWriter::OnPostSnapshot) ,而且可以從 CVssWriter::OnAbort內呼叫這些處理常式。