ClickOnce 配置 API を使用してアプリケーションの更新プログラムをプログラムで確認する
ClickOnce には、アプリケーションを配置した後に更新する 2 つの方法が用意されています。 最初の方法では、特定の間隔で更新を自動的にチェックするように ClickOnce 配置を構成できます。 2 つ目の方法では、ApplicationDeployment クラスを使用して、ユーザー要求などのイベントに基づいて更新をチェックするコードを記述できます。
Note
NET Core および .NET 5 以降のバージョンでは、System.Deployment.Application 名前空間内の ApplicationDeployment クラスと API はサポートされていません。 .NET 7 では、アプリケーションの配置プロパティにアクセスするための新しいメソッドがサポートされています。 詳細については、.NET の ClickOnce 配置プロパティへのアクセスに関するページを参照してください。 .NET 7 では、ApplicationDeployment メソッドと同等のメソッドはサポートされていません。
次の手順に、プログラムによる更新を実行するためのコードを示しています。さらに、プログラムによる更新チェックを有効にするように、ClickOnce 配置を構成する方法についても説明しています。
ClickOnce アプリケーションをプログラムで更新するには、更新プログラムの場所を指定する必要があります。 これは配置プロバイダーと呼ばれることもあります。 このプロパティの設定の詳細については、「ClickOnce の更新方法の選択」を参照してください。
Note
以下に示す手法を使用して、ある場所からアプリケーションを配置するが、別の場所からそれを更新することもできます。 詳細については、「方法: 配置の更新用に別の場所を指定する」を参照してください。
プログラムによって更新プログラムをチェックするには
任意のコマンドラインまたはビジュアル ツールを使用して、新しい Windows フォーム アプリケーションを作成します。
ユーザーに、更新プログラムをチェックするために選択させる任意のボタン、メニュー項目、またはその他のユーザー インターフェイス項目を作成します。 その項目のイベント ハンドラーから、更新プログラムをチェックしてインストールする次のメソッドを呼び出します。
private void InstallUpdateSyncWithInfo() { UpdateCheckInfo info = null; if (ApplicationDeployment.IsNetworkDeployed) { ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment; try { info = ad.CheckForDetailedUpdate(); } catch (DeploymentDownloadException dde) { MessageBox.Show("The new version of the application cannot be downloaded at this time. \n\nPlease check your network connection, or try again later. Error: " + dde.Message); return; } catch (InvalidDeploymentException ide) { MessageBox.Show("Cannot check for a new version of the application. The ClickOnce deployment is corrupt. Please redeploy the application and try again. Error: " + ide.Message); return; } catch (InvalidOperationException ioe) { MessageBox.Show("This application cannot be updated. It is likely not a ClickOnce application. Error: " + ioe.Message); return; } if (info.UpdateAvailable) { Boolean doUpdate = true; if (!info.IsUpdateRequired) { DialogResult dr = MessageBox.Show("An update is available. Would you like to update the application now?", "Update Available", MessageBoxButtons.OKCancel); if (!(DialogResult.OK == dr)) { doUpdate = false; } } else { // Display a message that the app MUST reboot. Display the minimum required version. MessageBox.Show("This application has detected a mandatory update from your current " + "version to version " + info.MinimumRequiredVersion.ToString() + ". The application will now install the update and restart.", "Update Available", MessageBoxButtons.OK, MessageBoxIcon.Information); } if (doUpdate) { try { ad.Update(); MessageBox.Show("The application has been upgraded, and will now restart."); Application.Restart(); } catch (DeploymentDownloadException dde) { MessageBox.Show("Cannot install the latest version of the application. \n\nPlease check your network connection, or try again later. Error: " + dde); return; } } } } }
アプリケーションをコンパイルします。
Mage.exe を使用して、プログラムによって更新プログラムをチェックするアプリケーションを展開する
「チュートリアル: ClickOnce アプリケーションを手動で配置する」で説明されているように、Mage.exe を使用してアプリケーションを配置する手順に従います。 Mage.exe を呼び出して、配置マニフェストを生成する場合は、コマンドライン スイッチ
providerUrl
を使用し、ClickOnce によって更新プログラムをチェックする URL を指定してください。 アプリケーションから更新する場合http://www.adatum.com/MyApp
、たとえば、配置マニフェストを生成する呼び出しが、これのようになります。mage -New Deployment -ToFile WindowsFormsApp1.application -Name "My App 1.0" -Version 1.0.0.0 -AppManifest 1.0.0.0\MyApp.manifest -providerUrl http://www.adatum.com/MyApp/MyApp.application
MageUI.exe を使用して、プログラムによって更新プログラムをチェックするアプリケーションを展開する
- 「チュートリアル: ClickOnce アプリケーションを手動で配置する」で説明されているように、Mage.exe を使用してアプリケーションを配置する手順に従います。 [配置オプション] タブで、[開始場所] フィールドを、アプリケーション マニフェスト ClickOnce によって更新プログラムがチェックされるように設定します。 [更新オプション] タブで、[このアプリケーションの更新プログラムを確認する] チェック ボックスをオフにします。
.NET Framework のセキュリティ
プログラムによる更新を使用するには、アプリケーションに完全信頼アクセス許可が必要です。