4

おそらくWMIを呼び出すことにより、C#を使用して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 に答える