以编程方式创建系统还原点是“禁忌”吗?在执行软件更新之前,我会这样做。如果有更好的方法只使用我的软件的文件和数据创建还原点,请告诉我。
如果在更新期间一切正常,关闭/杀死更新应用程序,电源关闭,用户拔出插头等,我想用一种方法让用户回到已知的工作状态。
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);
}
答案 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/
作者描述了“交易编程”。这类似于数据库中的事务。
示例:
启动交易:
这是一个新框架,但您可以将其视为一种解决方案,而不是使用框架。
通过使用交易,您可以获得正在寻找的“还原点”。
答案 5 :(得分:-1)
我认为完整的系统还原不是一个好计划。很快就会想到两个原因: