This documentation is archived and is not being maintained.

InPlaceHostingManager Class

Install a ClickOnce deployment on a machine.

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

'Declaration
<SecurityPermissionAttribute(SecurityAction.Demand, Unrestricted := True)> _
Public Class InPlaceHostingManager _
	Implements IDisposable
'Usage
Dim instance As InPlaceHostingManager

You can use InPlaceHostingManager to write programs that install ClickOnce applications programmatically. For example, you can use this class in a controlled system management software (SMS) environment or in situations where you need a complex installation that performs a number of pre-installation or post-installation operations on the local computer. Generally, you will want to use the members of this class in a specific order:

  1. Create a new instance of InPlaceHostingManager.

  2. Download the deployment manifest by using GetManifestAsync.

  3. Check that the application can be run with the appropriate permissions by using AssertApplicationRequirements.

  4. Download and install the application by using DownloadApplicationAsync.

  • If you call any of these parameters out of order, they will throw an exception.

InPlaceHostingManager can install a ClickOnce application, but cannot execute it. Some methods in this class, such as Execute, are reserved for use when downloading a Windows Presentation Foundation-based application that runs inside a Web browser.

To use InPlaceHostingManager to download and install applications, you must make sure that the certificate for signing the ClickOnce applications you plan to install is already installed on client computers as a trusted publisher. For more information on trusted publishers, see Trusted Application Deployment Overview.

NoteNote:

There is currently a product limitation that prevents InPlaceHostingManager from working correctly when you debug your code using Visual Studio. If you debug your application in Visual Studio by using the F5 key, the sample will throw mysterious exceptions when you call DownloadApplicationAsync. To debug using Visual Studio, start the application without debugging, and then attach the debugger. Alternatively, you can use another debugger, such as WinDbg.

The following code example shows how to use InPlaceHostingManager to install a ClickOnce application programmatically on a client machine.

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.Deployment.Application.InPlaceHostingManager

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 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
Show: