2012-05-25 2 views
6

Я ищу способ создать точку восстановления системы с текущей датой и временем, нажав кнопку. Я пробовал искать в Интернете простой способ сделать это, но я еще не нашел его.Как создать точку восстановления системы программно?

Я нашел этот фрагмент кода из: 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 
+0

См. Также этот вопрос: http://stackoverflow.com/questions/32845/creating-system-restore-points-thoughts – M4N

ответ

8

Вот VB.NET фрагмент кода, чтобы создать точку восстановления (найденный 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 

Должно быть легко "перевести" на C#.

А вот еще один фрагмент кода в C# взяты из 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#. хороший ответ в любом случае. – daryal

+0

Я пробовал один предыдущий @ M4N, он дает мне кучу недостающих ошибок сборки. Я не уверен, какие из них мне нужно добавить. – Boundinashes6

+0

@ Boundinashes6: вам, вероятно, придется добавить ссылку на System.Management (см. Здесь: 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

Спасибо за ваш ответ @ Дэвид Брабант, который дает мне непризнанную ошибку escape-последовательности в этот момент var restPoint = GetObject ("winmgmts: \\. \ Root \ default: Systemrestore"); – Boundinashes6

+0

Ответ от youhannesdedope. Отредактировал его, чтобы исправить проблему с побегом. –

+0

ok, что ошибка исчезла, но теперь я получаю следующую ошибку: имя «GetObject» не существует в текущем контексте – Boundinashes6

2

Поздно, но я улучшил ответ от 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); 
+0

, пожалуйста, предоставьте некоторое объяснение, чтобы понять код пользователя и как использовать не только код. – CodeChanger

+2

Я думал, что это объяснимо из-за внутренних сводок кода. Но я добавил пример. – Si13n7

Смежные вопросы