共用方式為


VSS_RESTOREMETHOD_ENUM列舉 (vswriter.h)

寫入器會在備份時使用 VSS_RESTOREMETHOD_ENUM 列舉,以透過寫入器元數據檔指定預設檔案還原方法,以用於其管理之所有元件中的所有檔案。

還原方法是全寫入器,也稱為原始還原目標,並以VSS_RT_ORIGINAL的VSS_RESTORE_TARGET值表示。

Syntax

typedef enum VSS_RESTOREMETHOD_ENUM {
  VSS_RME_UNDEFINED = 0,
  VSS_RME_RESTORE_IF_NOT_THERE,
  VSS_RME_RESTORE_IF_CAN_REPLACE,
  VSS_RME_STOP_RESTORE_START,
  VSS_RME_RESTORE_TO_ALTERNATE_LOCATION,
  VSS_RME_RESTORE_AT_REBOOT,
  VSS_RME_RESTORE_AT_REBOOT_IF_CANNOT_REPLACE,
  VSS_RME_CUSTOM,
  VSS_RME_RESTORE_STOP_START
} ;

常數

 
VSS_RME_UNDEFINED
值: 0
未定義還原方法。


這表示寫入器部分發生錯誤。

Express 寫入器不支持這個值。
VSS_RME_RESTORE_IF_NOT_THERE
只有在沒有版本的 時,要求者才應該還原所選元件或元件集的檔案
這些檔案目前位於磁碟上。


除非已針對檔案還原定義替代位置對應,否則如果 由 管理的任何檔案版本
選取的元件或元件集目前位於磁碟上,未由選取的檔案管理
應該還原元件或元件集。

如果已定義檔案的替代位置對應,且磁碟上存在檔案的版本
原始位置,只有當檔案版本不存在時,才應該將檔案寫入替代位置
替代位置。
VSS_RME_RESTORE_IF_CAN_REPLACE
只有在磁碟上目前檔案可以覆寫時,要求者才應該還原所選元件或元件集的檔案。


除非已針對檔案還原定義替代位置對應,否則如果有任何檔案的版本
無法覆寫磁碟上選取的元件或元件集,且未由 管理任何檔案
應該還原元件或元件集。

如果定義了檔案的替代位置對應,則應該將檔案寫入替代位置。
VSS_RME_STOP_RESTORE_START
要求者應該執行還原作業,如下所示:


  1. 傳送 PreRestore 事件,並等候所有寫入器處理它。

  2. 停止服務。

  3. 將檔案還原至其原始位置。

  4. 重新啟動服務。

  5. 傳送 PostRestore 事件,並等候所有寫入器處理它。


呼叫 IVssCreateWriterMetadata::SetRestoreMethod 方法時,會事先指定要停止的服務。 要求者可以藉由呼叫 IVssEx,WriterMetadata::GetRestoreMethod 方法來取得服務的名稱。

請注意,如果寫入器裝載於正在停止的服務中,該寫入器將不會收到 PostRestore 事件,因為寫入器實例標識元會在服務停止並重新啟動時變更。
VSS_RME_RESTORE_TO_ALTERNATE_LOCATION
要求者應該將所選元件或元件的檔案還原為 所指定位置的檔案
寫入器元件元數據檔案中指定的替代位置對應。 (請參閱
IVssCreateWriterMetadata::AddAlternateLocationMapping
IVssComponent::GetAlternateLocationMapping
IVssEx surveyWriterMetadata::GetAlternateLocationMapping
IVssWMFiledesc::GetAlternateLocation.)

Express 寫入器不支持這個值。
VSS_RME_RESTORE_AT_REBOOT
要求者應該在重新啟動計算機之後還原所選元件或元件集的檔案。


要還原的檔案應該複製到暫存位置,而且要求者應該使用
MoveFileEx
MOVEFILE_DELAY_UNTIL_REBOOT 旗標,以完成這些檔案還原至其檔案
計算機重新啟動之後的適當位置。
VSS_RME_RESTORE_AT_REBOOT_IF_CANNOT_REPLACE
可能的話,要求者應該將所選元件或元件的檔案還原為正確的檔案
立即定位。


如果磁碟上已設定所選元件或元件所管理的任何檔案版本
無法覆寫,則應該還原所選元件或元件集所管理的所有檔案
重新啟動計算機之後。

在此情況下,要還原的檔案應該複製到磁碟上的暫存位置,而且要求者應該
搭配 使用MoveFileEx
MOVEFILE_DELAY_UNTIL_REBOOT 旗標,以完成這些檔案還原至其檔案
計算機重新啟動之後的適當位置。
VSS_RME_CUSTOM
要求者應該使用自定義還原方法來還原所選所管理的檔案
元件或元件集。


自訂還原可能會使用指定寫入器私用的檔案擷取 API 函式或通訊協定
應用程式。 這類還原不需要使用寫入器元件元數據檔案中的資訊。 (請參閱
自訂備份和還原 以取得更多內容
information.)

Express 寫入器不支持這個值。
VSS_RME_RESTORE_STOP_START
要求者應該執行還原作業,如下所示:


  1. 傳送 PreRestore 事件,並等候所有寫入器處理它。

  2. 將檔案還原至其原始位置。

  3. 傳送 PostRestore 事件,並等候所有寫入器處理它。

  4. 停止服務。

  5. 重新啟動服務。


呼叫 IVssCreateWriterMetadata::SetRestoreMethod 方法時,寫入器會事先指定要停止的服務。 要求者可以藉由呼叫 IVssEx,WriterMetadata::GetRestoreMethod 方法來取得服務的名稱。

備註

寫入器會在備份期間呼叫 IVssCreateWriterMetadata::SetRestoreMethod ,在寫入器元數據文件中設定還原方法,以指定其所需的還原方法。

要求者藉由呼叫 IVssEx,WriterMetadata::GetRestoreMethod 來擷取寫入器要求的還原方法,並據以運作。

還原方法會套用至指定寫入器之所有元件中的所有檔案。

如果寫入器使用 IVssComponent::SetRestoreTarget 設定VSS_RT_ORIGINAL以外的VSS_RESTORE_TARGET值,則還原方法可能會在還原時逐一覆寫元件。

未定義替代位置對應的 VSS_RME_RESTORE_TO_ALTERNATE_LOCATION 還原方法會構成寫入器錯誤,而要求者應該回報它。

當還原方法需要檢查目前磁碟 上檔案的狀態 ( (VSS_RME_RESTORE_IF_NOT_THEREVSS_RME_RESTORE_IF_CAN_REPLACEVSS_RME_RESTORE_AT_REBOOT_IF_CANNOT_REPLACE) ,在理想情況下,您應該使用檔案 I/O 作業來確認可以還原整個元件,然後再實際繼續進行還原。

若要這樣做,最簡單的方法是在 還原之前以 獨佔方式開啟 (沒有共用) 所有目標檔案。

VSS_RME_RESTORE_IF_NOT_THERE的情況下,也應該設定 建立CREATE_NEW 處置旗標。

如果開啟作業成功,還原可以繼續進行,而且應該使用 CreateFile 傳回的句柄,實際將數據寫入磁碟。

如果沒有,可以傳回錯誤,視方法而定,或檢查替代位置對應,並 (是否可用) 使用,或下一次重新啟動時暫存以進行還原的元件檔案。

這可能是非常大型元件的問題, (其中某些元件可能會因為系統額外負荷而) 數千個檔案。

在此情況下,雖然較不可靠,但可用的選項是執行下列動作:

  1. 複製磁碟上目前的所有檔案,並還原至暫存快取。
  2. 嘗試將目前在磁碟上的檔案取代為備份的檔案, (可能是位於第二個暫存區域中的磁碟上,或是備份媒體) 上。
  3. 如果有任何檔案無法還原,請終止還原作業,並從其暫存位置複製源檔,並在重新啟動作業時繼續進行替代位置對應或還原。
如需 VSS 下備份和還原檔位置的詳細資訊,請參閱 非預設備份和還原位置

規格需求

需求
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限桌面應用程式]
標頭 vswriter.h

另請參閱

IVssBackupComponents::AddAlternativeLocationMapping

IVssComponent::GetAlternateLocationMapping

IVssCreateWriterMetadata::AddAlternateLocationMapping

IVssCreateWriterMetadata::SetRestoreMethod

IVssEx在Metadata::GetAlternateLocationMapping

IVssExriterMetadata::GetRestoreMethod

IVssWMFiledesc::GetAlternateLocation

VSS_WRITERRESTORE_ENUM