编写器对组件的定义
组件由编写器元数据文档中的编写器定义并实例化,以响应备份操作开始时的 标识事件 (请参阅填充编写器元数据文档时备份 初始化) 概述 。
使用 IVssCreateWriterMetadata 和 IVssCreateWriterMetadata::AddComponent 在其编写器元数据文档中创建组件时,编写器必须指定:
编写器可以选择指定:
- 组件的 逻辑路径 (它不仅在给定的编写器实例中而且在所有编写器实例中必须唯一)
- 组件说明 (或描述文字)
- 用于 GUI 的图标,用于指示组件
组件不需要实际包含任何文件。 这种空组件或“虚拟”组件可用于组织组件。 此类组件可用于定义 组件集 和编写器的组件, (请参阅 组件的逻辑路径) 。
设置组件组织
设置组件的可选择性 (其备份的可选项,以及还原) 及其逻辑路径的可选项,使编写器可以强制或选择在备份或还原操作中包含某些组件,并将组件分组到组件集中,其中一个可选组件充当整个组的入口点。
这些分组中的成员身份确定在备份和还原操作期间将使用哪些组件。 使用“selectable”表示为备份操作选择返回,为还原操作选择还原,开发人员应了解:
- 如果备份了由给定编写器管理的任何组件,则请求者必须在其备份组件文档的逻辑路径中显式包含所有不可选择的组件,并且这些组件作为一个组进行备份和还原。
- 请求者可以选择在备份和还原操作期间将可选组件显式添加到备份组件文档;添加组件后,必须备份或还原组件。
- 如果组件是可选的,则组件及其所有 子组件 (逻辑路径定义) 构成组件集,该组件集可以被视为单个单元,可以选择性地参与备份和还原操作。
- 请求者永远不会在备份和还原操作期间显式将具有可选上级的不可选择组件(组件集中的子组件)添加到其备份组件文档。 如果显式添加这些组件的可选上级,则必须 隐式包含 这些组件,在这种情况下,必须备份或还原它们 (请参阅 请求者) 使用组件 。
- 具有可选上级的可选组件仍然是 (组件集) 的 子组件 ,如果其可选上级显式包含在操作中,则可能会隐式包含该组件。 在这种情况下,其信息不会添加到备份组件文档。 如果操作中未包括其可选上级,则可以显式选择组件以包含在操作中,在这种情况下,其信息将包含在备份组件文档中。
- 无论任何可选择的上级的状态如何,备份中隐式包含的子组件都可以显式包含在还原操作中。 还原操作期间包括的任何可选择的还原子组件都必须将其信息添加到备份组件文档。
- 在 生成 PrepareForBackup 和 PreRestore 事件之前,没有显式添加到备份组件文档的编写器将不会收到任何进一步的 VSS 事件。
有关详细信息,请参阅 使用可选择性和逻辑路径。
将文件添加到组件
组件以文件集的形式包含 文件 信息,其中包含:
- 组件中文件的根目录。
- 组件中文件的文件规范。
- 一个标志,指示组件的规范是否是递归的。
根据组件类型, 可以是数据库或文件组, (数据库组件) 要加载的文件是数据还是日志文件,编写器调用 IVssCreateWriterMetadata::AddFilesToFileGroup、 IVssCreateWriterMetadata::AddDatabaseFiles 或 IVssCreateWriterMetadata::AddDatabaseLogFiles 来添加文件集。
使用这些函数时,应指定要添加到文件集的文件,如下所示:
- wszPath:这是包含要添加到文件集的文件的目录的路径。 如果 bRecursive 参数设置为 true, 则 wszPath 参数将指定要以递归方式遍历的目录层次结构,并且应重新创建所有目录,包括空目录。
- wszFilespec:此字符串指定要添加到文件集的每个目录中的文件。
例如,假设存在以下目录结构:
- C:\\Directory1\\File1.txt C:\\Directory1\\File2.txt C:\\Directory1\\Directory2\\File1.txt C:\\Directory1\\Directory2\\File2.txt C:\\Directory1\\Directory3\\
如果编写器为 wszPath 指定“C:\Directory1”,为 wszFilespec 指定“File1.*”,为 bRecursive 指定 true,则请求者应包括这些文件:
- C:\\Directory1\\File1.txt C:\\Directory1\\Directory2\\File1.txt
如果编写器改为为 wszPath 指定“C:\Directory1”,为 wszFilespec 指定“*”,为 bRecursive 指定 true,则请求者应包括这些文件:
- C:\\Directory1\\File1.txt C:\\Directory1\\File2.txt C:\\Directory1\\Directory2\\File1.txt C:\\Directory1\\Directory2\\File2.txt
如果编写器为 wszPath 指定“C:\Directory1”,为 wszFilespec 指定“*”,为 bRecursive 指定 false,则请求者应包括这些文件:
- C:\\Directory1\\File1.txt C:\\Directory1\\File2.txt
在上述所有示例中,每当编写器为 bRecursive 指定 true 时,都应重新创建空目录 C:\Directory1\Directory3\ 。
对于添加到文件组组件的文件集,如果当前位于磁盘上的文件不在编写器认为的适当位置或默认位置,编写器可以选择添加备用路径。 在这些情况下,文件集的路径定义包含文件的正常位置和文件的还原位置,而备用路径包含要备份的文件的当前位置。
备份时,文件集中的所有文件都必须存在。 请求者必须假定文件集中列出的所有文件都是备份所必需的,如果缺少任何文件,备份将失败。 请注意,当为 wszFilespec 参数指定“*”时,它可以匹配零个或多个文件。
请注意,此类编写器元数据文档属性(如备用位置映射、显式包含和排除的文件以及还原方法)是在编写器级别(而不是组件级别)设置的。 (有关详细信息,请参阅 使用编写器元数据文档。)
备份和还原操作的组件定义
还原和备份操作都必须生成 一个识别事件,对于备份和还原,将由同一 CVssWriter::OnIdentify 方法处理。
在备份操作期间,请求者使用编写器的 CVssWriter::OnIdentify 方法返回的信息来确定系统上存在哪些编写器,然后确定要备份哪些文件。
在还原操作期间,编写器的 CVssWriter::OnIdentify 事件返回的信息仅用于建立系统上当前存在的编写器的标识和状态;不使用还原期间生成的文件规范信息。 相反,备份时存储的编写器元数据文档用于获取此数据。
在备份操作期间生成后,编写器组件信息以及编写器信息的其余部分将被保存,以便检索以支持还原操作。 通常,请求者负责存储此信息。