Export (0) Print
Expand All

InPlaceHostingManager Class

Install or update a ClickOnce deployment on a computer.

System.Object
  System.Deployment.Application.InPlaceHostingManager

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

[SecurityPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
public class InPlaceHostingManager : IDisposable

The InPlaceHostingManager type exposes the following members.

  NameDescription
Public methodInPlaceHostingManager(Uri)Creates a new instance of InPlaceHostingManager to download and install the specified browser-hosted application.
Public methodInPlaceHostingManager(Uri, Boolean)Creates a new instance of InPlaceHostingManager to download and install the specified application, which can be either a stand-alone Windows Forms-based application or an application hosted in a Web browser.
Top

  NameDescription
Public methodAssertApplicationRequirements()Determines whether the ClickOnce application has the appropriate permissions and platform dependencies to run on the local computer.
Public methodAssertApplicationRequirements(Boolean)Determines whether the ClickOnce application has the appropriate permissions and platform dependencies to run on the local computer.
Public methodCancelAsyncCancels an asynchronous download operation.
Public methodDisposeReleases all resources used by the InPlaceHostingManager.
Public methodDownloadApplicationAsyncDownloads an application update in the background.
Public methodEquals(Object)Determines whether the specified object is equal to the current object. (Inherited from Object.)
Public methodExecuteLaunches the ClickOnce application, if and only if it is a Windows Presentation Foundation-based application running in a Web browser.
Protected methodFinalizeAllows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public methodGetHashCodeServes as the default hash function. (Inherited from Object.)
Public methodGetManifestAsyncDownloads the deployment manifest of the ClickOnce application in the background, and raises an event when the operation has either completed or encountered an error.
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Protected methodMemberwiseCloneCreates a shallow copy of the current Object. (Inherited from Object.)
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)
Public methodStatic memberUninstallCustomAddInRemoves a previously installed user-defined component of an application.
Public methodStatic memberUninstallCustomUXApplicationRemoves a ClickOnce application that includes the <customUX> element.
Top

  NameDescription
Public eventDownloadApplicationCompletedOccurs when the application has finished downloading to the local computer.
Public eventDownloadProgressChangedOccurs when there is a change in the status of an application or manifest download.
Public eventGetManifestCompletedOccurs when the deployment manifest has been downloaded to the local computer.
Top

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 computer.

InPlaceHostingManager iphm = null;

public void InstallApplication(string deployManifestUriStr)
{
    try
    {
        Uri deploymentUri = new Uri(deployManifestUriStr);
        iphm = new InPlaceHostingManager(deploymentUri, false);
    }
    catch (UriFormatException uriEx)
    {
        MessageBox.Show("Cannot install the application: " + 
            "The deployment manifest URL supplied is not a valid URL. " +
            "Error: " + uriEx.Message);
        return;
    }
    catch (PlatformNotSupportedException platformEx)
    {
        MessageBox.Show("Cannot install the application: " + 
            "This program requires Windows XP or higher. " +
            "Error: " + platformEx.Message);
        return;
    }
    catch (ArgumentException argumentEx)
    {
        MessageBox.Show("Cannot install the application: " + 
            "The deployment manifest URL supplied is not a valid URL. " +
            "Error: " + argumentEx.Message);
        return;
    }

    iphm.GetManifestCompleted += new EventHandler<GetManifestCompletedEventArgs>(iphm_GetManifestCompleted);
    iphm.GetManifestAsync();
}

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;
    }

    // bool isFullTrust = CheckForFullTrust(e.ApplicationManifest); 

    // Verify this application can be installed. 
    try
    {
        // the true parameter allows InPlaceHostingManager 
        // to grant the permissions requested in the applicaiton manifest.
        iphm.AssertApplicationRequirements(true) ; 
    }
    catch (Exception ex)
    {
        MessageBox.Show("An error occurred while verifying the application. " +
            "Error: " + 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. 
    iphm.DownloadProgressChanged += new EventHandler<DownloadProgressChangedEventArgs>(iphm_DownloadProgressChanged);
    iphm.DownloadApplicationCompleted += new EventHandler<DownloadApplicationCompletedEventArgs>(iphm_DownloadApplicationCompleted);

    try
    {
        // Usually this shouldn't throw an exception unless AssertApplicationRequirements() failed,  
        // or you did not call that method before calling this one.
        iphm.DownloadApplicationAsync();
    }
    catch (Exception downloadEx)
    {
        MessageBox.Show("Cannot initiate download of application. Error: " +
            downloadEx.Message);
        return;
    }
}

/*
private bool CheckForFullTrust(XmlReader appManifest)
{
    if (appManifest == null)
    {
        throw (new ArgumentNullException("appManifest cannot be null."));
    }

    XAttribute xaUnrestricted =
        XDocument.Load(appManifest)
            .Element("{urn:schemas-microsoft-com:asm.v1}assembly")
            .Element("{urn:schemas-microsoft-com:asm.v2}trustInfo")
            .Element("{urn:schemas-microsoft-com:asm.v2}security")
            .Element("{urn:schemas-microsoft-com:asm.v2}applicationRequestMinimum")
            .Element("{urn:schemas-microsoft-com:asm.v2}PermissionSet")
            .Attribute("Unrestricted"); // Attributes never have a namespace

    if (xaUnrestricted != null)
        if (xaUnrestricted.Value == "true")
            return true;

    return false;
}
*/ 

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

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

void iphm_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
    // you can show percentage of task completed using e.ProgressPercentage
}

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

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

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