2012-05-25 9 views
6

Tôi đang tìm cách tạo điểm khôi phục hệ thống với ngày giờ hiện tại bằng cách nhấn một nút. Tôi đã thử tìm kiếm trên web một cách đơn giản để thực hiện việc này nhưng tôi chưa tìm thấy.Làm thế nào để tạo điểm khôi phục hệ thống theo chương trình?

Tôi tìm thấy đoạn mã này từ: http://msdn.microsoft.com/en-us/library/windows/desktop/aa378847%28v=vs.85%29.aspx nhưng trong VB chứ không phải C#, tôi đã thử chuyển đổi một chút nhưng tôi không nghĩ rằng tôi đang làm một công việc tuyệt vời để dịch nó.

'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 
+0

Xem thêm câu hỏi sau: http://stackoverflow.com/questions/32845/creating-system-restore-points-thoughts – M4N

Trả lời

8

Dưới đây là một đoạn VB.NET để tạo một điểm khôi phục (tìm thấy here):

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 

Nên dễ "dịch" sang C#.

Và đây là một đoạn trong C# lấy từ this question:

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

câu hỏi được yêu cầu trả lời bằng C#. tốt câu trả lời anyway. – daryal

+0

Tôi đã thử rằng một @ M4N trước đó, nó mang lại cho tôi một loạt các lỗi tham chiếu lắp ráp bị thiếu. Tôi không chắc tôi cần thêm cái nào. – Boundinashes6

+0

@ Boundinashes6: Bạn có thể sẽ phải thêm một tham chiếu đến System.Management (xem tại đây: http://msdn.microsoft.com/en-us/library/system.management.managementscope.aspx) – M4N

0
var restPoint = GetObject(@"winmgmts:\\.\root\default:Systemrestore"); 
if(restPoint!=null) 
{ 
    if(restPoint.CreateRestorePoint("", 0, 100) == 0) 
    { 
     //do something 
    } 
    else 
    { 
     //do something 
    } 
} 
+0

Cảm ơn bạn đã phản hồi @ David Brabant, đó là cho tôi một lỗi trình tự thoát không được công nhận tại thời điểm này var restPoint = GetObject ("winmgmts: \\. \ Root \ default: Systemrestore"); – Boundinashes6

+0

Câu trả lời là từ youhannesdedope. Đã chỉnh sửa nó để khắc phục sự cố thoát. –

+0

ok rằng lỗi đã biến mất nhưng bây giờ tôi nhận được lỗi sau: Tên 'GetObject' không tồn tại trong ngữ cảnh hiện tại – Boundinashes6

2

muộn, nhưng tôi cải thiện câu trả lời từ 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); 
    } 
} 

Ví dụ:

CreateRestorePoint("Example Restore Point", EventType.BeginSystemChange, RestorePointType.ModifySettings); 
+0

vui lòng cung cấp một số giải thích để giúp người dùng hiểu mã và cách sử dụng không chỉ cung cấp mã. – CodeChanger

+2

Tôi nghĩ rằng nó là tự giải thích vì tóm tắt mã nội bộ. Nhưng tôi đã thêm một ví dụ. – Si13n7