为并行程序集创作状态存储
创建自己的并行程序集时,请遵循 创建并行程序集的准则 ,并根据为并行程序集创作 DLL 中的准则创作要包含在程序集中的任何 DLL。
遵循以下有关存储状态的准则:
将状态存储设计为向前和向后兼容。 预期版本按任意顺序使用:例如,v1、v3、v2。
在程序集代码中初始化和设置程序集的默认设置。 不要在注册表中保存默认设置。
注册表设置必须基于单个版本编写,以隔离可能同时运行的多个程序集版本。 将并行程序集设计为在并行共享方案中正确存储和处理程序集的状态。
程序集通常将状态信息存储在注册表项中。 创作一组头文件和帮助程序函数,以便轻松对包含程序集状态的注册表项进行版本控制。
保存在注册表中的任何程序集状态信息都必须与程序集的其他版本隔离。 存储在注册表中的状态设置必须保存在注册表的各个版本部分中。 这在注册表的 HKLM 和 HKCU 部分中都是必需的。 例如,将程序集版本 XXXX 的 HKCU 状态设置存储在以下注册表项下:
HKCU\MyCompany\MyComponent\VersionXXXX
共享程序集存储在注册表中的任何状态信息都必须保存在注册表的各个版本节中。 例如,名为 EnableSuperCoolFeature 的状态设置的值可能为 TRUE 或 FALSE。 存储 共享并行程序集 的值,如下所示:
\ HKEY_CurrentUser软件\MyCompany\MyComponent\版本01.01\EnableSuperCoolFeature = TRUE
私有程序集存储在注册表中的任何状态信息都必须保存在注册表的各个应用程序节中。 这会将程序集的状态设置与应用程序隔离。 可以使用 GetModuleFileName 函数设置虚拟根。 例如,如果程序集版本 XXYY 是“SomeApplication”的私有程序集,则对 GetModuleFileName 的 调用将返回“SomeApplication”,并且程序集的任何私有状态设置都应在以下项下编写:
HKCU\MyCompany\MyComponent\VersionXXYYY\SomeApplication
使注册表中存储的共享状态设置对运行的程序集上下文专用。 可以使用 GetModuleFileName 函数设置虚拟根。 应为 HKLM 和 HKCU 分支执行此操作。
理想情况下,应采用持久性模型,在该模型中,应用程序会保留状态,并且不会更改注册表。 应用程序不应直接接触组件的注册表项。 相反,程序集应提供保存或还原并行兼容的设置的 API 函数。
程序集可以将状态设置保存在注册表外部的存储中,使程序集能够与全局状态交互。 并行程序集可能使用以下并行兼容存储:
- 受保护的存储 (pstore)
- WinInet 缓存
- Microsoft SQL Server