调用 SRSetRestorePoint

应用程序可以在导致发生重大系统更改(例如安装、卸载或更新)之前创建还原点。

安装程序应在安装前创建还原点,方法是,在 dwEventType 结构的 RESTOREPOINTINFO 成员设置为 BEGIN_SYSTEM_CHANGE 时调用 SRSetRestorePoint 函数。 若要通知系统还原安装已完成,请在 dwEventType 设置为 END_SYSTEM_CHANGE 时调用 SRSetRestorePoint

如果用户取消应用程序安装,则安装程序可能会删除安装开始时创建的还原点。 删除还原点是可选的,可以阻止用户在取消期间从安装程序进行的意外更改中还原。 如果安装程序要删除还原点,则可以调用 SRRemoveRestorePoint 函数,或在 dwRestorePointType 设置为 CANCELLED_OPERATIONdwEventType 设置为 END_SYSTEM_CHANGE,且 llSequenceNumber 设置为对 SRSetRestorePoint 的初始调用返回的值时调用 SRSetRestorePoint

从 Windows 8 开始,开发人员可以编写在 HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore 注册表项下创建 DWORD 值 SystemRestorePointCreationFrequency 的应用程序。 此注册表项的值可以更改还原点创建频率。 默认情况下,此项不存在。

当应用程序调用 SRSetRestorePoint 函数来创建还原点时,会根据该项的内容发生以下情况之一:

  • 如果该项不存在(默认值),并且在过去 24 小时内创建了任何还原点,则 Windows 将跳过创建此新还原点。 系统还原将 IISequenceNumber 结构的 STATEMGRSTATUS 成员设置为之前在当天创建的还原点的序列号,并将 nStatus 成员的值设置为 ERROR_SUCCESSSRSetRestorePoint 函数返回 TRUE

  • 如果注册表项值为 0,则系统还原不会跳过创建新还原点的过程。

  • 如果注册表项值为整数 N,则系统还原会跳过在前 N 分钟内创建任何还原点时创建新还原点的过程。

在 Windows 8 上运行的系统还原监视仅与系统还原相关的引导卷中的文件。 如果 Windows 8 上运行的系统还原创建的引导卷快照随后由早期版本的 Windows 公开快照,可能会删除该快照。 请注意,虽然只有一个系统卷,但多启动系统中每个操作系统都有一个引导卷。

开发人员可以编写在 HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore 注册表项下创建 DWORD 值 ScopeSnapshots 的应用程序。 如果此注册表项值为 0,则系统还原会以与早期版本的 Windows 相同的方式创建引导卷快照。 如果删除此值,则在 Windows 8 上运行的系统还原会恢复创建监视仅与系统还原相关的引导卷中的文件的快照。

有关示例,请参阅使用系统还原