ClickOnce の更新方法の選択

ClickOnce では、アプリケーションを自動的に更新できます。 ClickOnce アプリケーションは、配置マニフェスト ファイルを定期的に読み取り、アプリケーションに対する更新が利用可能かどうかを確認します。 利用可能であれば、アプリケーションの新しいバージョンがダウンロードされて実行されます。 効率性を高めるために、変更されたファイルだけがダウンロードされます。

ClickOnce アプリケーションのデザイン時に、アプリケーションが利用可能な更新プログラムをチェックする際に使用する方法を決定する必要があります。 使用できる基本的な方法は、アプリケーションの起動時に更新プログラムをチェックする方法、アプリケーションの起動後に更新プログラムをチェックする方法 (バックグラウンド スレッドで実行)、更新用のユーザー インターフェイスを提供する方法の 3 つです。

また、アプリケーションが更新プログラムをチェックする頻度を決定でき、更新を必須にすることもできます。

注意

アプリケーションの更新には、ネットワーク接続が必要です。 ネットワーク接続されていない場合、選択した更新方法に関係なく、アプリケーションは更新プログラムをチェックせずに実行されます。

Note

.NET Framework 2.0 および .NET Framework 3.0 で、アプリケーションの起動の前後、または <xref:System.Deployment.Application> の API を使用して更新プログラムがあるかどうかをチェックする場合は、配置マニフェストで deploymentProvider を設定する必要があります。 deploymentProvider 要素は、Visual Studio の [発行] タブの [更新] ダイアログ ボックスにある [更新の場所] に対応します。この規則は、.NET Framework 3.5 で緩和されています。 詳細については、テスト サーバーおよび運用サーバーのために、再署名を行わず ClickOnce アプリケーションを配置することに関するページを参照してください。

アプリケーション起動後に更新プログラムを確認する

この方法を使用した場合、アプリケーションは、実行中にバックグラウンドで配置マニフェスト ファイルの検索と読み取りを試みます。 更新が利用可能な場合は、ユーザーが次回アプリケーションを実行したときに、更新プログラムをダウンロードしてインストールするかどうかを確認するプロンプトが表示されます。

この方法は、低帯域幅のネットワーク接続や、ダウンロードに時間を要する可能性のあるサイズの大きなアプリケーションに最も適しています。

この更新方法を有効にするには、[アプリケーションの更新] ダイアログ ボックスの [アプリケーションの更新プログラムを確認する方法を選択してください] セクションにある [アプリケーションの開始後に行う] をクリックします。 さらに、[アプリケーションの更新プログラムの確認を実行する頻度を指定してください] で更新間隔を指定します。

これは、次のように配置マニフェストで Update 要素を変更することと同じです。

<!-- When to check for updates -->
<subscription>
   <update>
      <expiration maximumAge="6" unit="hours" />
   </update>
</subscription>

アプリケーション起動前に更新プログラムを確認する

既定の方法では、アプリケーションが起動される前に、配置マニフェストの検索と読み取りが試みられます。 この方法を使用した場合、ユーザーがアプリケーションを起動するたびに、アプリケーションは配置マニフェスト ファイルの検索と読み取りを試みます。 更新プログラムを利用できない場合は、アプリケーションの既存のバージョンが開始されます。 必要な更新プログラムを利用できる場合は、それがダウンロードされて開始されます。 更新プログラムを利用できても、必須でない場合は、既存のバージョンをアップグレードするか開始するかをユーザーが選択できます。

この方法は、高帯域幅のネットワーク接続に最も適しています。低帯域幅の接続では、アプリケーション起動時の遅延が容認できないほど長くなる可能性があります。

この更新方法を有効にするには、[アプリケーションの更新] ダイアログ ボックスの [アプリケーションの更新プログラムを確認する方法を選択してください] セクションにある [アプリケーションの開始前に行う] をクリックします。

これは、次のように配置マニフェストで Update 要素を変更することと同じです。

<!-- When to check for updates -->
<subscription>
   <update>
      <beforeApplicationStartup />
   </update>
</subscription>

注意

.NET Core 3.1 および .NET 5 以降のアプリケーションでは、サポートされている唯一の更新オプションは、アプリケーション起動前に更新プログラムを確認することです。

更新を必須にする

アプリケーションの最新バージョンを実行するようユーザーに要求することが必要な場合があります。 たとえば、Web サービスなどの外部リソースに変更を加えたことで、旧バージョンのアプリケーションが適切に動作できなくなるような場合です。 この場合、更新を必須としてマークし、ユーザーが旧バージョンを実行するのを防ぎます。

Note

他の更新方法を使用して更新を要求することもできますが、古いバージョンを確実に実行できないようにするのは、[アプリケーションの開始前に行う] をオンにする方法だけです。 起動時に必須の更新が検出された場合、ユーザーは更新を受け入れるか、アプリケーションを終了する必要があります。

更新を必須としてマークするには、[アプリケーションの更新] ダイアログ ボックスで [このアプリケーションに最低限必要なバージョンを指定してください] をクリックし、発行バージョン ([メジャー][マイナー][ビルド][リビジョン]) を指定することで、インストール可能なアプリケーションの最も低いバージョン番号を指定します。

これは、次のように配置マニフェストの Deployment 要素の minimumRequiredVersion 属性を設定することと同じです。

<deployment install="true" minimumRequiredVersion="1.0.0.0">

更新間隔を指定する

アプリケーションが更新プログラムをチェックする頻度を指定できます。 そのためには、前の「アプリケーション起動後の更新プログラムのチェック」で説明したように、アプリケーションが起動後に更新プログラムをチェックするように指定します。

更新間隔を指定するには、[アプリケーションの更新] ダイアログ ボックスの [アプリケーションの更新プログラムの確認を実行する頻度を指定してください] プロパティを設定します。

これは、配置マニフェストで Update 要素の maximumAge 属性と unit 属性を設定することと同じです。

たとえば、アプリケーションを実行するたびにチェックしたり、週に 1 回または月に 1 回チェックしたりできます。 指定した時期にネットワーク接続されていない場合は、アプリケーションを次回実行したときに、更新プログラムのチェックが実行されます。

Note

.NET Core および .NET 5 以降用の ClickOnce では、この機能はサポートされていません。 詳細については、.NET 用 ClickOnce に関するページを参照してください。

更新用のユーザー インターフェイスを提供する

この方法を使用する場合、アプリケーション開発者は、アプリケーションが更新プログラムをチェックする場所と頻度をユーザーが選択できるようにするユーザー インターフェイスを提供します。 たとえば、[更新を今すぐ確認] コマンドや、別の更新間隔を選択できる [更新の設定] ダイアログ ボックスなどを提供できます。 ClickOnce 配置 API には、独自の更新用ユーザー インターフェイスをプログラミングするためのフレームワークが用意されています。 詳細については、「System.Deployment.Application」を参照してください。

注意

NET Core および .NET 5 以降のバージョンでは、System.Deployment.Application 名前空間内の ApplicationDeployment クラスと API はサポートされていません。 .NET 7 では、アプリケーションの配置プロパティにアクセスするための新しいメソッドがサポートされています。 詳細については、.NET の ClickOnce 配置プロパティへのアクセスに関するページを参照してください。 .NET 7 では、ApplicationDeployment メソッドと同等のメソッドはサポートされていません。

アプリケーションが配置 API を使用して自身の更新ロジックを制御する場合、次の「更新プログラムのチェックのブロッキング」で説明されているように更新プログラムのチェックをブロックする必要があります。

この方法は、ユーザーごとに異なる更新方法が必要な場合に最も適しています。

更新プログラムのチェックをブロックする

アプリケーションが更新プログラムをチェックしないようにすることもできます。 たとえば、更新されることのない単純なアプリケーションがあるが、ClickOnce の配置によって提供されるインストールの容易さは利用したい場合があります。

アプリケーションが配置 API を使用して自身の更新を実行する場合も、更新プログラムのチェックをブロックする必要があります。前の「更新用のユーザー インターフェイスを提供する」を参照してください。

更新プログラムのチェックをブロックするには、[アプリケーションの更新] ダイアログ ボックスの [アプリケーションの更新プログラムを確認する] チェック ボックスをオフにします。

配置マニフェストから <Subscription> タグを削除することにより、更新プログラムのチェックをブロックすることもできます。

アクセス許可の昇格と更新

ClickOnce アプリケーションの新しいバージョンが、実行の際に以前のバージョンよりも高い信頼レベルを必要とする場合、ClickOnce ではユーザーに対し、この高い信頼レベルをアプリケーションに付与するかどうかの確認が行われます。 ユーザーが高い信頼レベルの付与を拒否した場合、更新プログラムはインストールされません。 ClickOnce で、次回の起動時にアプリケーションを再インストールするように求めるメッセージが表示されます。 その時点でユーザーがより高い信頼レベルの付与を拒否し、更新が必須とマークされていない場合は、アプリケーションの古いバージョンが実行されます。 ただし、更新が必須である場合は、ユーザーがより高い信頼レベルを受け入れるまで、アプリケーションは実行されません。

信頼されたアプリケーションの配置を使用する場合は、信頼レベルの要求が行われません。 詳細については、「信頼されたアプリケーションの配置の概要」を参照してください。