2012-05-25 16 views
6

Szukam sposobu, aby utworzyć punkt przywracania systemu z bieżącą datą i godziną, naciskając przycisk. Próbowałem przeszukać sieć w prosty sposób to zrobić, ale jeszcze nie znalazłem.Jak programowo utworzyć punkt przywracania systemu?

Znalazłem ten fragment kodu z: http://msdn.microsoft.com/en-us/library/windows/desktop/aa378847%28v=vs.85%29.aspx, ale to jest w VB, a nie C#, próbowałem trochę go przekonwertować, ale nie sądzę, że wykonuję świetną robotę tłumaczenia tego.

'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

Zobacz także to pytanie: http://stackoverflow.com/questions/32845/creating-system-restore-points-thoughts – M4N

Odpowiedz

8

Oto urywek VB.NET, aby utworzyć punkt przywracania (znajdujący 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 

powinien być łatwy do "przełożenia" na C#.

A oto kolejny fragment kodu w języku C# wzięte z 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

pytanie jest poproszony o odpowiedź przy użyciu C#. dobra odpowiedź. – daryal

+0

Próbowałem, że jeden poprzedni @ M4N, daje mi kilka brakujących błędów odniesienia zespołu. Nie jestem pewien, które muszę dodać. – Boundinashes6

+0

@ Boundinashes6: Prawdopodobnie będziesz musiał dodać odniesienie do System.Management (patrz tutaj: 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

Dzięki za odpowiedź @ David Brabant, który daje mi nierozpoznany błąd sekwencji ucieczki w tym momencie var restPoint = GetObject ("winmgmts: \\. \ Root \ default: Systemrestore"); – Boundinashes6

+0

Odpowiedź pochodzi od youhannesdedope. Zmieniono go, aby naprawić problem ucieczki. –

+0

OK, że ten błąd zniknął, ale teraz otrzymuję następujący błąd: Nazwa "GetObject" nie istnieje w bieżącym kontekście – Boundinashes6

2

późno, ale poprawiło odpowiedź od 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); 
    } 
} 

Przykład:

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

proszę podać wyjaśnienie, aby zrozumieć kod użytkownika i jak używać nie tylko podać kod. – CodeChanger

+2

Myślałem, że to było oczywiste z powodu wewnętrznych podsumowań kodu. Ale dodałem przykład. – Si13n7

Powiązane problemy