Cum se creează programatic un punct de restaurare a sistemului?

Căut un mod de a crea un punct de restaurare a sistemului cu data și ora curente prin apăsarea unui buton. Am incercat sa caut pe web un mod simplu de a face acest lucru, dar nu am gasit-o inca.

Am găsit acest fragment de cod de la: http://msdn.microsoft.com/en-us/library/windows/desktop/aa378847%28v=vs.85%29.aspx dar este în VB și nu C#, am încercat să-l convertesc un pic dar nu cred că fac o treabă bună de traducere.

'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
6
Vedeți, de asemenea, această întrebare: stackoverflow.com/questions/32845/ & hellip;
adăugat autor M4N, sursa

3 răspunsuri

Iată un fragment VB.NET pentru a crea un punct de restaurare (găsit aici ):

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

Ar trebui să fie ușor de tradus în C #.

Iată un alt fragment din C# preluat din această întrebare :

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); 
}
8
adăugat
@ Boundinashes6: Probabil că va trebui să adăugați o referință la System.Management (a se vedea aici: msdn.microsoft.com/en-us/library/… )
adăugat autor M4N, sursa
Am încercat că un precedent @ M4N, acesta îmi dă o grămadă de erori lipsă de referință asamblare. Nu sunt sigur care dintre ele trebuie să adaug.
adăugat autor Boundinashes6, sursa
întrebarea este solicitată pentru a răspunde folosind c #. un răspuns bun oricum.
adăugat autor daryal, sursa

Târziu, dar am îmbunătățit răspunsul de la M4N ...

/// 
/// The type of event. For more information, see . ///
 
public enum EventType
{
    /// 
/// A system change has begun. A subsequent nested call does not create a new restore /// point. /// /// Subsequent calls must use , not /// . /// ///
 
    BeginNestedSystemChange = 0x66,

    /// 
/// A system change has begun. ///
 
    BeginSystemChange = 0x64,

    /// 
/// A system change has ended. ///
 
    EndNestedSystemChange = 0x67,

    /// 
/// A system change has ended. ///
 
    EndSystemChange = 0x65
}

/// 
/// The type of restore point. For more information, see . ///
 
public enum RestorePointType
{
    /// 
/// An application has been installed. ///
 
    ApplicationInstall = 0x0,

    /// 
/// An application has been uninstalled. ///
 
    ApplicationUninstall = 0x1,

    /// 
/// An application needs to delete the restore point it created. For example, an /// application would use this flag when a user cancels an installation. ///
 
    CancelledOperation = 0xd,

    /// 
/// A device driver has been installed. ///
 
    DeviceDriverInstall = 0xa,

    /// 
/// An application has had features added or removed. ///
 
    ModifySettings = 0xc
}

/// 
/// Creates a restore point on the local system. ///
 
/// 
///     The description to be displayed so the user can easily identify a restore point.
/// 
/// 
///     The type of event.
/// 
/// 
///     The type of restore point. 
/// 
/// 
///     Access denied.
/// 
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);
    }
}

Exemplu:

CreateRestorePoint("Example Restore Point", EventType.BeginSystemChange, RestorePointType.ModifySettings);
2
adăugat
furnizați explicații pentru a obține codul de înțelegere de către utilizator și cum să utilizați nu doar să furnizați cod.
adăugat autor CodeChanger, sursa
Am crezut că a fost explicativ din cauza rezumatelor de cod intern. Dar am adăugat un exemplu.
adăugat autor Si13n7, sursa
var restPoint = GetObject(@"winmgmts:\\.\root\default:Systemrestore");
if(restPoint!=null)
{
    if(restPoint.CreateRestorePoint("", 0, 100) == 0)
    {
        //do something
    }
    else
    {
         //do something
    }
}
0
adăugat
ydd1987, codul numai răspunsurile nu sunt în general utile deoarece nu explică punctul de răspuns. Extindeți puțin.
adăugat autor Jacobm001, sursa
Vă mulțumim pentru răspunsul dvs. @David Brabant, care îmi dă o eroare secvență de evadare nerecunoscută la acest punct var restPoint = GetObject ("winmgmts: \\. \ Root \ default: Systemrestore");
adăugat autor Boundinashes6, sursa
ok, eroarea a dispărut, dar acum primesc următoarea eroare: Numele "GetObject" nu există în contextul actual
adăugat autor Boundinashes6, sursa
Răspunsul este de la youhannesdedope. Edited pentru a rezolva problema de evacuare.
adăugat autor David Brabant, sursa