2009-02-06 45 views

回答

9

接触Morten说你可以使用该API。就我所知,WMI没有提供删除还原点的方法。如果您拥有序列号,则SRRemoveRestorePoint可以删除还原点。你可以通过WMI获得。这是我的代码来删除还原点。

[DllImport("Srclient.dll")] 
public static extern int SRRemoveRestorePoint(int index); 

private void button1_Click(object sender, EventArgs e) 
{ 
    int SeqNum = 335; 
    int intReturn = SRRemoveRestorePoint(SeqNum); 
} 

我刚刚投掷了335块,因为这是我在系统中找到的最远的一块。计数从1开始并持续递增。所以它不像只有像你在数组中那样的索引那么简单。

至于获取序列号,我将代码从Microsoft转换为C#,它会给你的信息。请务必添加System.Management作为参考。否则,此代码将无法正常工作。

private void EnumRestorePoints() 
    { 
     System.Management.ManagementClass objClass = new System.Management.ManagementClass("\\\\.\\root\\default", "systemrestore", new System.Management.ObjectGetOptions()); 
     System.Management.ManagementObjectCollection objCol = objClass.GetInstances(); 

     StringBuilder Results = new StringBuilder(); 
     foreach (System.Management.ManagementObject objItem in objCol) 
     { 
      Results.AppendLine((string)objItem["description"] + Convert.ToChar(9) + ((uint)objItem["sequencenumber"]).ToString()); 
     } 

     MessageBox.Show(Results.ToString()); 
    } 

我在我的盒子上测试了这个(Vista的方式),它的工作没有问题。还必须以管理员身份运行,但我认为你已经想到了。

0

虽然我对WMI一无所知,但this资源可能会让您开始。它不直接触及你的问题,但也许它可能有用。无论如何,似乎相关的Win32/COM函数是SRRemoveRestorePoint。我希望这是有用的。

或者,您可以使用VBScript,如果您非常喜欢。