Export (0) Print
Expand All
This topic has not yet been rated - Rate this topic

InPlaceHostingManager.DownloadApplicationAsync Method

Downloads an application update in the background.

Namespace:  System.Deployment.Application
Assembly:  System.Deployment (in System.Deployment.dll)
public void DownloadApplicationAsync()
ExceptionCondition
InvalidOperationException

Raised if this method is called before the GetManifestAsync and AssertApplicationRequirements methods.

You must call this method after calling AssertApplicationRequirements.

The following code example demonstrates the use of DownloadApplicationAsync, which it calls at the end of a successful GetManifestCompleted event handler.

The following code examples assume that you have already defined and created an instance of InPlaceHostingManager named iphm.

void iphm_GetManifestCompleted(object sender, GetManifestCompletedEventArgs e)
{
    // Check for an error. 
    if (e.Error != null)
    {
        // Cancel download and install.
        MessageBox.Show("Could not download manifest. Error: " + e.Error.Message);
        return;
    }

    // Dig inside of the manifest and see if this application requests full trust. 
    // You can determine this by searching for a PermissionSet tag 
    // that has the Unrestricted attribute set to true. 
    bool isFullTrust = CheckForFullTrust(e.ApplicationManifest);

    // Verify this application can be installed. 
    try
    {
        iphm.AssertApplicationRequirements();
    }
    catch (InvalidDeploymentException assertEx)
    {
        // Security exception. Report the error to the user.
        MessageBox.Show("Cannot install the application due to a security error. " +
            "Error text: " + assertEx.Message);
        return;
    }
    catch (Exception ex)
    {
        MessageBox.Show("An error occurred while verifying the application. " +
            "Error text: " + ex.Message);
        return;
    }

    // Use the information from GetManifestCompleted() to confirm  
    // that the user wants to proceed.
    string appInfo = "Application Name: " + e.ProductName;
    appInfo += "\nVersion: " + e.Version;
    appInfo += "\nSupport/Help Requests: " + (e.SupportUri != null ?
        e.SupportUri.ToString() : "N/A");
    appInfo += "\n\nConfirmed that this application can run with its requested permissions.";
    if (isFullTrust)
    {
        appInfo += "\n\nThis application requires full trust in order to run.";
    }
    appInfo += "\n\nProceed with installation?";

    DialogResult dr = MessageBox.Show(appInfo, "Confirm Application Install",
        MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
    if (dr != System.Windows.Forms.DialogResult.OK)
    {
        return;
    }

    // Download the deployment manifest.  
    // We've added error handling here simply to be robust. Usually, 
    // this shouldn't throw an exception unless  
    // AssertApplicationRequirements() failed, or you did not call that method 
    // before calling this one.
    iphm.DownloadProgressChanged += new EventHandler<DownloadProgressChangedEventArgs>(iphm_DownloadProgressChanged);
    iphm.DownloadApplicationCompleted += new EventHandler<DownloadApplicationCompletedEventArgs>(iphm_DownloadApplicationCompleted);

    try
    {
        iphm.DownloadApplicationAsync();
    }
    catch (Exception downloadEx)
    {
        MessageBox.Show("Cannot initiate download of application. Error: " +
            downloadEx.Message);
        return;
    }
}

private bool CheckForFullTrust(XmlReader appManifest)
{
    bool isFullTrust = false;

    if (appManifest == null)
    {
        throw (new ArgumentNullException("appManifest cannot be null."));
    }

    while (appManifest.Read())
    {
        // Find the minimum required permission set. 
        if (appManifest.NodeType == XmlNodeType.Element)
        {
            if (appManifest.Name.Equals("applicationRequestMinimum"))
            {
                // Get the next two nodes, which are PermissionSet and 
                // defaultAssemblyRequest. 
                // TODO: Will there ALWAYS be just one PermissionSet here? If so, 
                // I can stick with the simple logic of just examining the  
                // PermissionSet node. Otherwise, I'll need to get  
                // defaultAssemblyRequest, and check the appropriate  
                // PermissionSet.    
                while (appManifest.Read())
                {
                    if (appManifest.Name.Equals("PermissionSet"))
                    {
                        // This is a required attribute - no need to sanity-check 
                        // its existence. 
                        if (appManifest.GetAttribute("Unrestricted").Equals("true"))
                        {
                            isFullTrust = true;
                        }

                        break;
                    }
                }

                break;
            }
        }
    }

    return isFullTrust;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0, 2.0
Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback

Community Additions

ADD
Show:
© 2014 Microsoft. All rights reserved.