DownloadProgressChangedEventArgs Class

Provides data for the DownloadProgressChanged event.

Namespace: System.Deployment.Application
Assembly: System.Deployment (in system.deployment.dll)

'Declaration
Public Class DownloadProgressChangedEventArgs
	Inherits ProgressChangedEventArgs
'Usage
Dim instance As DownloadProgressChangedEventArgs

public class DownloadProgressChangedEventArgs extends ProgressChangedEventArgs
public class DownloadProgressChangedEventArgs extends ProgressChangedEventArgs
Not applicable.

In a console application, since events are assigned to threads out of a thread pool, you might receive update progress events out of order, with a subsequent event showing a decrease compared to a previous event. You will not see such behavior in a Windows Forms application, because events in Windows Forms are processed sequentially out of the UI thread's message queue.

The following code example demonstrates the use of DownloadProgressChangedEventArgs in the context of an application that uses InPlaceHostingManager to download and install a ClickOnce application programmatically.

Dim WithEvents iphm As InPlaceHostingManager = Nothing

Private Sub InstallApplication(ByVal deployManifestUriStr As String)
    Try
        Dim deploymentUri As New Uri(deployManifestUriStr)
        iphm = New InPlaceHostingManager(deploymentUri, False)
        MessageBox.Show("Created the object.")
    Catch uriEx As UriFormatException
        MessageBox.Show("Cannot install the application: The deployment manifest URL supplied is not a valid URL." & _
            "Error: " & uriEx.Message)
        Return
    Catch platformEx As PlatformNotSupportedException
        MessageBox.Show("Cannot install the application: This program requires Windows XP or higher. " & _
            "Error: " & platformEx.Message)
        Return
    Catch argumentEx As ArgumentException
        MessageBox.Show("Cannot install the application: The deployment manifest URL supplied is not a valid URL." & _
            "Error: " & argumentEx.Message)
        Return
    End Try

    iphm.GetManifestAsync()
End Sub

Private Sub iphm_GetManifestCompleted(ByVal sender As Object, ByVal e As GetManifestCompletedEventArgs) Handles iphm.GetManifestCompleted
    ' Check for an error.
    If (e.Error IsNot Nothing) Then
        ' Cancel download and install.
        MessageBox.Show("Could not download manifest. Error: " & e.Error.Message)
        Return
    End If

    ' 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.
    Dim isFullTrust As Boolean = CheckForFullTrust(e.ApplicationManifest)

    ' Verify this application can be installed.
    Try
        iphm.AssertApplicationRequirements()
    Catch assertEx As InvalidDeploymentException
        ' 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 ex As Exception
        MessageBox.Show("An error occurred while verifying the application. " & "Error text: " & ex.Message)
        Return
    End Try

    ' Use the information from GetManifestCompleted() to confirm 
    ' that the user wants to proceed.
    Dim appInfo As String = "Application Name: " & e.ProductName
    appInfo &= ControlChars.Lf & "Version: " & e.Version.ToString()
    appInfo &= ControlChars.Lf & "Support/Help Requests: "

    If Not (e.SupportUri Is Nothing) Then
        appInfo &= e.SupportUri.ToString()
    Else
        appInfo &= "N/A"
    End If

    appInfo &= ControlChars.Lf & ControlChars.Lf & _
        "Confirmed that this application can run with its requested permissions."

    If isFullTrust Then
        appInfo &= ControlChars.Lf & ControlChars.Lf & _
            "This application requires full trust in order to run."
    End If

    appInfo &= ControlChars.Lf & ControlChars.Lf & "Proceed with installation?"

    Dim dr As DialogResult = MessageBox.Show(appInfo, _
        "Confirm Application Install", MessageBoxButtons.OKCancel, MessageBoxIcon.Question)
    If dr <> System.Windows.Forms.DialogResult.OK Then
        Return
    End If

    ' 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.
    Try
        iphm.DownloadApplicationAsync()
    Catch downloadEx As Exception
        MessageBox.Show("Cannot initiate download of application. Error: " & downloadEx.Message)
        Return
    End Try
End Sub

Private Function CheckForFullTrust(ByVal appManifest As XmlReader) As Boolean
    Dim isFullTrust As Boolean = False

    If (appManifest Is Nothing) Then
        Throw New ArgumentNullException("appManifest cannot be null.")
    End If

    While appManifest.Read()
        ' Find the minimum required permission set.
        If (appManifest.NodeType = XmlNodeType.Element) Then
            If (appManifest.Name.Equals("applicationRequestMinimum")) Then
                ' 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")) Then
                        ' This is a required attribute - no need to sanity-check
                        ' its existence.
                        If (appManifest.GetAttribute("Unrestricted").Equals("true")) Then
                            isFullTrust = True
                        End If

                        Exit While
                    End If
                End While

                Exit While
            End If
        End If
    End While

    Return isFullTrust
End Function

Private Sub iphm_DownloadProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs) Handles iphm.DownloadProgressChanged
    toolStripProgressBar1.ProgressBar.Value = e.ProgressPercentage
End Sub

Private Sub iphm_DownloadApplicationCompleted(ByVal sender As Object, ByVal e As DownloadApplicationCompletedEventArgs) Handles iphm.DownloadApplicationCompleted
    ' Check for an error.
    If (e.Error IsNot Nothing) Then
        ' Cancel download and install.
        MessageBox.Show("Could not download and install application. Error: " & e.Error.Message)
        Return
    End If

    ' Inform the user that their application is ready for use. 
    MessageBox.Show("Application installed! You may now run it from the Start menu.")
End Sub

System.Object
   System.EventArgs
     System.ComponentModel.ProgressChangedEventArgs
      System.Deployment.Application.DownloadProgressChangedEventArgs

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

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

The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.

.NET Framework

Supported in: 3.0, 2.0

Community Additions

ADD
Show: