ClickOnce ApplicationDeployment class
MSDNのサンプルでもあるのだが、一度ClickOnceで配布されたアプリケーションであれば、更新差分の有無のチェック、更新作業、更新を反映するためのアプリケーションの再起動を、以下のように非常に簡単なコードで実装できる。
public void UpdateAction() } UpdateCheckInfo info = null; ApplicationDeployment deployment = null; try { deployment = ApplicationDeployment.CurrentDeployment; info = deployment.CheckForDetailedUpdate(); } catch (DeploymentDownloadException exp) { MessageBox.Show("アプリケーション配布情報のダウンロードに失敗しました"); return; } catch (InvalidDeploymentException ide) { MessageBox.Show("アプリケーションの配布情報が取得できません"); return; } catch (InvalidOperationException ioe) { MessageBox.Show("このアプリケーションは、ClickOnceで配布されたものではありません"); return; } if (info != null && info.UpdateAvailable) { Boolean doUpdate = true; if (!info.IsUpdateRequired) { DialogResult dr = MessageBox.Show("最新の更新差分があります。今すぐ更新しますか?", "更新差分があります", MessageBoxButtons.OKCancel); if (!(DialogResult.OK == dr)) { doUpdate = false; } } if (doUpdate) { try { deployment.Update(); MessageBox.Show("アプリケーションは更新されました。自動的に再起動されます"); Thread.Sleep(500); Application.Restart(); } catch (DeploymentDownloadException dde) { MessageBox.Show("アプリケーションの更新が失敗しました"); return; } } } }
Application#Restart()メソッドなんて、何時の時点で追加されていたんだろう。それは良いとして、本当に簡単上記のことが出来るのにはびっくりする。自分で制御するのと違い、解らないのはApplicationDeployment#CurrentDeploymentが何を見ているか、ということだ。MSDNを見る限り、AppDomain経由で何かを読んでいるっぽいが、ソースコードが手元に無いんでさっぱりわからん。