创建系统还原点 - 想法?

时间:2008-08-28 17:16:55

标签: system-restore

以编程方式创建系统还原点是“禁忌”吗?在执行软件更新之前,我会这样做。如果有更好的方法只使用我的软件的文件和数据创建还原点,请告诉我。

如果在更新期间一切正常,关闭/杀死更新应用程序,电源关闭,用户拔出插头等,我想用一种方法让用户回到已知的工作状态。

    private void CreateRestorePoint(string description)
    {
        ManagementScope oScope = new ManagementScope("\\\\localhost\\root\\default");
        ManagementPath oPath = new ManagementPath("SystemRestore");
        ObjectGetOptions oGetOp = new ObjectGetOptions();
        ManagementClass oProcess = new ManagementClass(oScope, oPath, oGetOp);

        ManagementBaseObject oInParams = oProcess.GetMethodParameters("CreateRestorePoint");
        oInParams["Description"] = description;
        oInParams["RestorePointType"] = 12; // MODIFY_SETTINGS
        oInParams["EventType"] = 100;

        ManagementBaseObject oOutParams = oProcess.InvokeMethod("CreateRestorePoint", oInParams, null); 
    }

6 个答案:

答案 0 :(得分:4)

  

以编程方式创建系统还原点是“禁忌”吗?

没有。这就是API存在的原因;这样你就可以对系统进行伪原子更新。

答案 1 :(得分:3)

这是不是一个好主意,取决于你做了多少。完整的系统还原点很重要 - 创建需要时间,存储磁盘空间,并添加到还原点的接口,可能会将早期还原点从存储中推出。

因此,如果您的更新实际上只是更改您的应用程序(即它存储的数据,构成它的二进制文件,它的注册表项),那么它实际上并不是系统级更改,我投票支持没有恢复点。您可以通过备份要更改的部件并提供还原到备份选项来模拟功能。我的观点是,系统还原应该是在进行可能破坏它的全局更改(应用程序安装等)时还原系统。

一个人应该只使用系统服务的反驳论点并不适合我;我担心,如果你必须对你的应用程序发出一些更新,那么系统还原点集可能会变得如此之大,以至于重要的,真正的“系统范围”更新可能会被推出,或者在噪声中丢失。

答案 2 :(得分:2)

不,这不是禁忌 - 事实上,我鼓励它。操作系统管理硬盘需要多少钱,而且我会把钱花在微软花费更多的钱上。时间测试系统恢复比你的钱和&你正在测试你的设置应用程序的时间。

答案 3 :(得分:1)

如果您正在为Vista开发应用程序,您可以使用Transactional NTFS,它支持与您要查找的功能类似的功能。

http://en.wikipedia.org/wiki/Transactional_NTFS

但安装程序包是否已包含此类型的回滚支持?我对他们中的大多数都不是很熟悉,所以我不确定。

最后,Windows通常会在您运行安装应用程序时自动创建还原点。

答案 4 :(得分:0)

请查看以下链接:http://www.calumgrant.net/atomic/

作者描述了“交易编程”。这类似于数据库中的事务。

示例:

启动交易:

  1. 第1步
  2. 第2步
  3. 第2步中遇到错误
  4. 在交易开始前回滚。
  5. 这是一个新框架,但您可以将其视为一种解决方案,而不是使用框架。

    通过使用交易,您可以获得正在寻找的“还原点”。

答案 5 :(得分:-1)

我认为完整的系统还原不是一个好计划。很快就会想到两个原因:

  • 浪费的磁盘空间
  • 回滚的意外后果