方法 : ClickOnce 配置 API を使用してアプリケーションの更新プログラムをプログラムで確認する

ClickOnce には、配置されたアプリケーションを更新する 2 つの方法が用意されています。 1 番目の方法では、一定の間隔で自動的に更新プログラムを確認するように ClickOnce 配置を構成できます。 2 番目の方法では、ApplicationDeployment クラスを使用して、ユーザー要求などのイベントに基づいて更新プログラムを確認するコードを作成できます。

次の手順では、プログラムによる更新を実行するためのコードを示し、プログラムによる更新プログラムの確認が可能となるように ClickOnce 配置を構成する方法を説明します。

ClickOnce アプリケーションをプログラムによって更新するには、更新プログラムの場所を指定する必要があります。 これは、配置プロバイダーと呼ばれる場合があります。 このプロパティの設定の詳細については、「ClickOnce の更新方法の選択」を参照してください。

注意

以下で説明する手法を使用すると、ある場所からアプリケーションを配置し、それを別の場所から更新することもできます。詳細については、「方法 : 配置の更新用に別の場所を指定する」を参照してください。

更新プログラムの確認をプログラムから行うには

  1. 任意のコマンド ライン ツールまたはビジュアル ツールを使用して、新しい Windows フォーム アプリケーションを作成します。

  2. 更新プログラムを確認する場合にユーザーが選択するボタン、メニュー項目、またはその他のユーザー インターフェイス項目を作成します。 更新プログラムを確認してインストールするには、その項目のイベント ハンドラーから次のメソッドを呼び出します。

    Private Sub InstallUpdateSyncWithInfo()
        Dim info As UpdateCheckInfo = Nothing 
    
        If (ApplicationDeployment.IsNetworkDeployed) Then 
            Dim AD As ApplicationDeployment = ApplicationDeployment.CurrentDeployment
    
            Try
                info = AD.CheckForDetailedUpdate()
            Catch dde As DeploymentDownloadException
                MessageBox.Show("The new version of the application cannot be downloaded at this time. " + ControlChars.Lf & ControlChars.Lf & "Please check your network connection, or try again later. Error: " + dde.Message)
                Return 
            Catch ioe As InvalidOperationException
                MessageBox.Show("This application cannot be updated. It is likely not a ClickOnce application. Error: " & 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("An update is available. Would you like to update the application now?", "Update Available", MessageBoxButtons.OKCancel)
                    If (Not System.Windows.Forms.DialogResult.OK = dr) Then
                        doUpdate = False 
                    End If 
                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)
                End If 
    
                If (doUpdate) Then 
                    Try
                        AD.Update()
                        MessageBox.Show("The application has been upgraded, and will now restart.")
                        Application.Restart()
                    Catch dde As DeploymentDownloadException
                        MessageBox.Show("Cannot install the latest version of the application. " & ControlChars.Lf & ControlChars.Lf & "Please check your network connection, or try again later.")
                        Return 
                    End Try 
                End If 
            End If 
            End If 
    End Sub
    
    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;
                    }
                }
            }
        }
    }
    
    public:
        void InstallUpdateSync()
        {
            if (ApplicationDeployment::IsNetworkDeployed)
            {
                bool isUpdateAvailable = false;
                ApplicationDeployment^ appDeployment =
                    ApplicationDeployment::CurrentDeployment;
    
                try
                {
                    isUpdateAvailable = appDeployment->CheckForUpdate();
                }
                catch (InvalidOperationException^ ex)
                {
                    MessageBox::Show("The update check failed. Error: {0}",
                        ex->Message);
                    return;
                }
    
                if (isUpdateAvailable)
                {
                    try
                    {
                        appDeployment->Update();
                        MessageBox::Show(
                            "The application has been upgraded, and will now " +
                            "restart.");
                        Application::Restart();
                    }
                    catch (Exception^ ex)
                    {
                        MessageBox::Show("The update failed. Error: {0}",
                            ex->Message);
                        return;
                    }
    
                }
            }
        }
    
  3. アプリケーションをコンパイルします。

プログラムで更新プログラムを確認するアプリケーションを Mage.exe を使用して配置する場合

  • チュートリアル : ClickOnce アプリケーションを手動で配置する」で説明されている、Mage.exe を使用してアプリケーションを配置するための手順に従います。 Mage.exe を呼び出して配置マニフェストを生成する場合は、必ず providerUrl コマンド ライン スイッチを使用し、ClickOnce が更新プログラムを確認する URL を指定します。 たとえば、アプリケーションが https://www.microsoft.com/ja/jp/default.aspx から更新される場合は、次のような呼び出しによって配置マニフェストを生成します。

    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 を使用してアプリケーションを配置するための手順に従います。 [配置オプション] タブで、[Start Location] フィールドを ClickOnce が更新プログラムを確認するアプリケーション マニフェストに設定します。 [更新オプション] タブで、[アプリケーションの更新プログラムを確認する] チェック ボックスをオフにします。

セキュリティ

プログラムによる更新を使用するには、アプリケーションに完全信頼のアクセス許可が必要です。

参照

処理手順

方法 : 配置の更新用に別の場所を指定する

概念

ClickOnce の更新方法の選択

ClickOnce アプリケーションの発行