おそらくWMIを呼び出すことにより、C#を使用してWindows復元ポイントを削除する方法を探しています。
コードスニペットは非常に役立ちます。
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)でテストしましたが、問題なく動作しました。また、管理者として実行する必要がありますが、あなたはそれを理解したと思います。
私は WMI について何も知りませんが、このリソースを参考にしてください。あなたの問題に直接触れることはありませんが、何らかの形で役立つ可能性があります。とにかく、関連する Win32/COM 関数はSRRemoveRestorePointのようです。これが役に立てば幸いです。
または、必要に応じてVBScriptを使用することもできます。