如何以编程方式创build系统还原点?

我正在寻找一种方法来创build一个系统还原点与当前date和时间通过按下button。 我试过在网上search一个简单的方法来做到这一点,但我还没有find一个。

我发现这个代码片段: http : //msdn.microsoft.com/en-us/library/windows/desktop/aa378847%28v=vs.85%29.aspx但它是在VB中,而不是C#,我试图转换这一点,但我不认为我做翻译它很好的工作。

'CreateRestorePoint Method of the SystemRestore Class 'Creates a restore point. Specifies the beginning and 'the ending of a set of changes so that System Restore 'can create a restore point.This method is the 'scriptable equivalent of the SRSetRestorePoint function. Set Args = wscript.Arguments If Args.Count() > 0 Then RpName = Args.item(0) Else RpName = "Vbscript" End If Set obj = GetObject("winmgmts:{impersonationLevel=impersonate}!root/default:SystemRestore") If (obj.CreateRestorePoint(RpName, 0, 100)) = 0 Then wscript.Echo "Success" Else wscript.Echo "Failed" End If 

Solutions Collecting From Web of "如何以编程方式创build系统还原点?"

这里有一个VB.NET片段来创建一个还原点(在这里找到):

 Dim restPoint = GetObject("winmgmts:\\.\root\default:Systemrestore") If restPoint IsNot Nothing Then If restPoint.CreateRestorePoint("test restore point", 0, 100) = 0 Then MsgBox("Restore Point created successfully") Else MsgBox("Could not create restore point!") End If End If 

应该很容易“翻译”到C#。

这里是从这个问题的 C#中的另一个片段:

 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); } 

晚了,但是我改善了M4N的答案

 /// <summary> /// The type of event. For more information, see <see cref="CreateRestorePoint"/>. /// </summary> public enum EventType { /// <summary> /// A system change has begun. A subsequent nested call does not create a new restore /// point. /// <para> /// Subsequent calls must use <see cref="EventType.EndNestedSystemChange"/>, not /// <see cref="EventType.EndSystemChange"/>. /// </para> /// </summary> BeginNestedSystemChange = 0x66, /// <summary> /// A system change has begun. /// </summary> BeginSystemChange = 0x64, /// <summary> /// A system change has ended. /// </summary> EndNestedSystemChange = 0x67, /// <summary> /// A system change has ended. /// </summary> EndSystemChange = 0x65 } /// <summary> /// The type of restore point. For more information, see <see cref="CreateRestorePoint"/>. /// </summary> public enum RestorePointType { /// <summary> /// An application has been installed. /// </summary> ApplicationInstall = 0x0, /// <summary> /// An application has been uninstalled. /// </summary> ApplicationUninstall = 0x1, /// <summary> /// An application needs to delete the restore point it created. For example, an /// application would use this flag when a user cancels an installation. /// </summary> CancelledOperation = 0xd, /// <summary> /// A device driver has been installed. /// </summary> DeviceDriverInstall = 0xa, /// <summary> /// An application has had features added or removed. /// </summary> ModifySettings = 0xc } /// <summary> /// Creates a restore point on the local system. /// </summary> /// <param name="description"> /// The description to be displayed so the user can easily identify a restore point. /// </param> /// <param name="eventType"> /// The type of event. /// </param> /// <param name="restorePointType"> /// The type of restore point. /// </param> /// <exception cref="ManagementException"> /// Access denied. /// </exception> public static void CreateRestorePoint(string description, EventType eventType, RestorePointType restorePointType) { var mScope = new ManagementScope("\\\\localhost\\root\\default"); var mPath = new ManagementPath("SystemRestore"); var options = new ObjectGetOptions(); using (var mClass = new ManagementClass(mScope, mPath, options)) using (var parameters = mClass.GetMethodParameters("CreateRestorePoint")) { parameters["Description"] = description; parameters["EventType"] = (int)eventType; parameters["RestorePointType"] = (int)restorePointType; mClass.InvokeMethod("CreateRestorePoint", parameters, null); } } 

例:

 CreateRestorePoint("Example Restore Point", EventType.BeginSystemChange, RestorePointType.ModifySettings); 
 var restPoint = GetObject(@"winmgmts:\\.\root\default:Systemrestore"); if(restPoint!=null) { if(restPoint.CreateRestorePoint("", 0, 100) == 0) { //do something } else { //do something } }