NonSoft

システム復元ポイントを作成するサンプル(VB.NET)


 サンプル(ソース/コード)
<このサンプルの概要>
システム復元ポイントを作成するサンプル(VB.NET)です。
XPの場合、「アクセサリ→システムツール→システムの復元」で作成出来る復元ポイントです。
VB.NETでシステム復元ポイントを作るには2つのプログラミング方法があります。

1つは、System.Management.ManagementClass("root\default:SystemRestore")を使用する方法です。
この方法を使用したツールとして復元ポイント作成ツール(1.0.0.0)を公開しました。原因不明ですが
この方法では時々[プロバイダによる読み込みエラーです]が発生すると言う情報がありました。

そこで、もう1つの方法を試してみる事にしました。
GetObject("winmgmts:\\.\root\default:Systemrestore")を使用する方法です。
この方法を使用したツールとして復元ポイント作成ツール(1.0.0.1)を公開しています。
残念ながら、この方法でも時々エラーが発生しました。エラーログは以下の通りです。
プロバイダによる読み込みエラーです 
場所 Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet(...)
場所 Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(...)
場所 NonCrp.clsMain.Main()

現在は復元ポイント作成ツール(1.0.0.2)を公開しています。
こちらは、GetObject("winmgmts:\\.\root\default:Systemrestore")の方法でエラーが発生した場合は、
最大10回のリトライをして、エラー時に使用者の手を煩わす可能性を減らしています。

※[プロバイダによる読み込みエラーです]について
シンテスムのプロパティーで環境変数のPATHに以下の設定を追加したらエラーが発生しなくなった
との報告がありました。%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\wbem

★フォームモジュール(Form1.vb)
Public Class Form1

    Private Sub Button1_Click( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' System.Managementを参照設定する必要があります
        ' 復元ポイントを作成するオブジェクト取得
        Dim sr As New System.Management.ManagementClass("root\default:SystemRestore")
        ' 復元ポイント作成の実行
        sr.InvokeMethod("CreateRestorePoint", New Object() {"NonCrp1", 0, 100})
    End Sub

    Private Sub Button2_Click( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        ' 復元ポイントを作成するオブジェクト取得
        Dim sr As Object = GetObject("winmgmts:\\.\root\default:Systemrestore")
        ' 復元ポイント作成の実行
        Dim crp As Object = sr.createrestorepoint("NonCrp2", 0, 100)
    End Sub

End Class