组件的逻辑路径
逻辑路径 用于将编写器管理的组件组织成定义良好的组。
逻辑路径类似于传统的文件路径,使用反斜杠“\”分隔路径中的元素。 与文件路径不同,逻辑路径的根目录为 NULL,而不是“\”。
逻辑路径表示为 NULL 终止的字符串,并且路径可以包含的字符没有其他限制。
逻辑路径的最重要用法是在定义 组件集中,其中一个可选组件的备份或还原操作中的 显式组件 需要包含多个其他组件 (子组件) 。 组件集定义组件的逻辑路径是其子组件逻辑路径的父路径,并且:
- 子组件必须共享为定义组件集的可选组件的逻辑路径的根路径。
- NULL 的根路径有效。
- 定义可选组件的名称必须是组件集的每个不可选择子组件的根路径之后的第一个逻辑路径元素。
- 组件集可以嵌套。
- 逻辑路径和组件名称的组合在 编写器类的所有实例中必须是唯一的。
下面定义的逻辑路径结构的编写器 MyWriter 的假设示例说明了逻辑路径。
组件名称 | 逻辑路径 | 可选择进行备份 |
---|---|---|
“可执行文件” | "" | N |
“ConfigFiles” | “可执行文件” | N |
“LicenseInfo” | "" | Y |
“Security” | "" | Y |
“UserInfo” | “Security” | N |
“证书” | “Security” | N |
“writerData” | "" | Y |
“Set1” | “writerData” | N |
“Jan” | “writerData\Set1” | N |
“Dec” | “writerData\Set1” | N |
“Set2” | “writerData” | N |
“Jan” | “writerData\Set2” | N |
“Dec” | “writerData\Set2” | N |
“Query” | “writerData\QueryLogs” | N |
“用法” | “writerData” | Y |
“Jan” | “writerData\Usage” | N |
“Dec” | “writerData\Usage” | N |
请注意,组件“可执行文件”和“ConfigFile”具有父子关系,但两者都是不可选择的。 因此,它们不会形成组件集。 每当编写器 MyWriter 备份或还原时,这两个组件都必须 显式包含在 操作中。
组件“LicenseInfo”既不能选择上级也不是后代。 它可以在请求者自由裁量权的备份或还原操作中显式包含或不包含它。
组件“安全性”定义一个简单的组件集,其中包含其下方没有组件集。
组件“writerData”定义了一个组件集,其中包含一个复杂的组件集合,其下方具有多个定义完善的逻辑路径层次结构。
可以选择一个子组件“Usage”,并定义组件集。
多个组件具有相同的名称,并按逻辑路径进行区分。 不可选择组件“Dec”和“Jan”的实例存在于组件不可选择的组件“Set1”和“Set2”以及可选择的子组件“Usage”下。
如果组件“writerData”显式包含在备份或还原中,则其所有子组件(即使是由“Usage”定义的嵌套组件集中的组件)都将隐式包含在操作中。
如果备份或还原中未显式包含由“writerData”定义的组件集,组件“Set1”、“Set2”和“QueryLogs” (及其子组件“Dec”和“Jan”) 实例将不会隐式包含在备份或还原操作中。
但是,即使操作中不包含“writerData”,组件“Usage”仍可选择,并且仍可显式包含在备份或还原操作中。 如果是,则会隐式包含其子组件“Jan”和“Dec”。
其他值得注意的要点:
- 可选组件“LicenseInfo”和“writerData”和不可选择的组件“可执行文件”都位于 MyWriter 的逻辑路径层次结构中的同一级别:所有组件具有相同的 NULL 或“”逻辑路径,即根逻辑路径。
- 如果在备份或还原操作中显式包含可选择的父 (“writerData”) ,则不应在备份中显式包含可选择组件“Usage”。
- 定义组件集的组件可能只是出于组织原因而存在。 例如,“writerData”或“Usage”组件(或两者)可能为空;也就是说,没有使用 IVssCreateWriterMetadata::AddFilesToFileGroup、IVssCreateWriterMetadata::AddDatabaseFiles 或 IVssCreateWriterMetadata::AddDatabaseLogFiles 方法向其添加任何文件集。 组件仍定义组件集。