2012-05-25 15 views
6

Bir düğmeye basarak geçerli tarih ve saat ile sistem geri yükleme noktası oluşturmanın bir yolunu arıyorum. Bunu yapmak için web'de arama yapmayı denedim ancak henüz bir tane bulamadım.Sistem geri yükleme noktası nasıl programlanır?

Bu kod parçacığını şu adresten buldum: http://msdn.microsoft.com/en-us/library/windows/desktop/aa378847%28v=vs.85%29.aspx ama VB'de değil, C# de, biraz dönüştürmeyi denedim ama çevirmeyi harika bir iş yapıyorum sanmıyorum.

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# için "tercüme" kolay olmalı:

'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

Ayrıca şu soruya da bakınız: http://stackoverflow.com/questions/32845/creating-system-restore-points-thoughts – M4N

cevap

8

İşte bir geri yükleme noktası (here bulundu) oluşturmak için bir VB.NET pasajı var.

Ve burada this question alınan C# başka parçacık İşte: Geç

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

sorudan C# kullanarak yanıtlanması istenir. Yine de iyi cevap. – daryal

+0

Bir önceki @ M4N'yi denedim, bana bir grup eksik montaj referansı hatası veriyor. Hangileri eklemem gerektiğinden emin değilim. – Boundinashes6

+0

@ Boundinashes6: Muhtemelen System.Management öğesine bir başvuru eklemeniz gerekecektir (bkz. 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

Yanıtınız için teşekkürler @ David Brabant, bu noktada bana bir Tanınmayan kaçış dizisi hatası veriyor var restPoint = GetObject ("winmgmts: \\. \ Root \ default: Systemrestore"); – Boundinashes6

+0

Cevap, youhannesdedope'dan. Kaçış problemini düzeltmek için düzenledim. –

+0

Tamam, bu hata gitti ama şimdi aşağıdaki hatayı alıyorum: Geçerli bağlamda 'GetObject' adı mevcut değil – Boundinashes6

2

ama M4N cevabını ... geliştirilmiş

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

Örnek:

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

, lütfen kullanıcının kodu anlama ve yalnızca kod sağlamasının yanı sıra nasıl kullanılacağını öğrenmek için bazı açıklamalar verin. – CodeChanger

+2

Dahili kod özetleri nedeniyle kendini açıklayıcı olduğunu düşündüm. Ama ben bir örnek ekledim. – Si13n7

İlgili konular