4

我正在寻找一种使用 C# 可能通过调用 WMI 来删除 Windows 还原点的方法。

任何代码片段都会非常有帮助。

4

2 回答 2

11

谈到 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)上测试了这个,它没有问题。还必须以管理员身份运行,但我想你已经明白了。

于 2009-02-15T03:44:18.727 回答
0

虽然我对 WMI 一无所知,但此资源可能会帮助您入门。它不会直接触及您的问题,但也许它会以某种方式有用。无论如何,似乎相关的 Win32/COM 函数是SRRemoveRestorePoint。我希望这有任何用处。

或者,如果您愿意,您可以使用VBScript 。

于 2009-02-06T08:55:01.900 回答