VB2005 CkickOnceアプリケーションを強制的にアップデートする方法 (2方法)

1. 更新オプションで設定する方法

[プロジェクトのプロパティー] – [発行]タブの[更新…]ボタンを押す.
ダイアログで「アプリケーションの開始前に行う」を選び,
「このアプリケーションに最低限必要なバージョンを指定してください」にチェックを付け,発行するバージョン番号を入力する.

この方法は発行前に毎回バージョン番号を入力しなければならないが,必要なときだけ強制アップデートができて便利である.


2. コードでおこなう方法

下記,InstallUpdateSyncWithInfo プロシージャーをフォームのLoadイベントなどに入れる.

    Private Sub InstallUpdateSyncWithInfo()
        Dim info As Deployment.Application.UpdateCheckInfo = Nothing

        ‘ClickOnceの場合に実行
        If (Deployment.Application.ApplicationDeployment.IsNetworkDeployed) Then
            Dim AD As Deployment.Application.ApplicationDeployment = Deployment.Application.ApplicationDeployment.CurrentDeployment

            Try
                info = AD.CheckForDetailedUpdate()
            Catch dde As Deployment.Application.DeploymentDownloadException
                MessageBox.Show(“現在、新しいバージョンのアプリケーションをダウンロードできません。” + ControlChars.Lf + ControlChars.Lf + “ネットワーク接続を確認するか、後ほど実行してください。エラー: ” + dde.Message)
                Return
            Catch ioe As InvalidOperationException
                MessageBox.Show(“このアプリケーションをアップデートできません。ClickOnce アプリケーションでない可能性があります。エラー: ” + ioe.Message)
                Return
            End Try

            ‘アップデート版がある
            If (info.UpdateAvailable) Then
                Dim doUpdate As Boolean = True

                ‘必須の更新ではない場合に確認するとき
                ‘If (Not info.IsUpdateRequired) Then
                ‘    Dim dr As DialogResult = MessageBox.Show(“アップデート版があります。今すぐアップデートしますか?”, “アップデート可能”, MessageBoxButtons.OKCancel)
                ‘    If (Not System.Windows.Forms.DialogResult.OK = dr) Then
                ‘        doUpdate = False
                ‘    End If
                ‘End If

                ‘アップデート実行
                If (doUpdate) Then
                    Try
                        AD.Update()
                        MessageBox.Show(“アプリケーションがアップデートされました。再起動します。”)
                        Application.Restart()
                    Catch dde As Deployment.Application.DeploymentDownloadException
                        MessageBox.Show(“アップデートできませんでした。” + ControlChars.Lf + ControlChars.Lf + “ネットワーク接続を確認するか、後ほど実行してください。”)
                        Return
                    End Try
                End If
            End If
        End If
    End Sub

このコードを追加した1回目の更新は,元のアプリケーションにこのコードがないから強制アップデートにはならないので注意.


参考:
ClickOnceの運用を成功させる5つのポイント (@IT)

ApplicationDeployment.Update メソッド (MSDN)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です