How to: Check for Application Updates Programmatically Using the ClickOnce Deployment API - Visual Studio 2015 (original) (raw)


Share via


Note

This article applies to Visual Studio 2015. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here

ClickOnce provides two ways to update an application once it is deployed. In the first method, you can configure the ClickOnce deployment to check automatically for updates at certain intervals. In the second method, you can write code that uses the ApplicationDeployment class to check for updates based on an event, such as a user request.

The following procedures show some code for performing a programmatic update and also describe how to configure your ClickOnce deployment to enable programmatic update checks.

In order to update a ClickOnce application programmatically, you must specify a location for updates. This is sometimes referred to as a deployment provider. For more information on setting this property, see Choosing a ClickOnce Update Strategy.

To check for updates programmatically

  1. Create a new Windows Forms application using your preferred command-line or visual tools.
  2. Create whatever button, menu item, or other user interface item you want your users to select to check for updates. From that item's event handler, call the following method to check for and install updates.
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;  
                }  
            }  
        }  
    }  
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;  
                }  
            }  
        }  
    }  
}  
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  
  1. Compile your application.

Using Mage.exe to deploy an application that checks for updates programmatically

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  

Using MageUI.exe to deploy an application that checks for updates programmatically

.NET Framework Security

Your application must have full-trust permissions to use programmatic updating.

See Also

How to: Specify an Alternate Location for Deployment Updates
Choosing a ClickOnce Update Strategy
Publishing ClickOnce Applications