InPlaceHostingManager 类

定义

在计算机上安装或更新 ClickOnce 部署。Install or update a ClickOnce deployment on a computer.

public ref class InPlaceHostingManager : IDisposable
public class InPlaceHostingManager : IDisposable
type InPlaceHostingManager = class
    interface IDisposable
Public Class InPlaceHostingManager
Implements IDisposable
继承
InPlaceHostingManager
实现

示例

下面的代码示例演示如何使用 InPlaceHostingManager 在客户端计算机上以编程方式安装 ClickOnce 应用程序。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
}
    Dim WithEvents iphm As InPlaceHostingManager = Nothing

    Public 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

        ' Dim isFullTrust As Boolean = CheckForFullTrust(e.ApplicationManifest)

        ' Verify this application can be installed.
        Try
            ' the true parameter allows InPlaceHostingManager
            ' to grant the permissions requested in the application manifest. 
            iphm.AssertApplicationRequirements(True)
        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. 
        ' 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

#If 0 Then
    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

        Dim xaUnrestricted As 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 Then
            If xaUnrestricted.Value = "true" Then
                Return True
            End If
        End If

        Return False
    End Function
#End If

    Private Sub iphm_DownloadProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs) Handles iphm.DownloadProgressChanged
        ' you can show percentage of task completed using 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

注解

可以使用 InPlaceHostingManager 编写以编程方式安装 ClickOnce 应用程序的程序。You can use InPlaceHostingManager to write programs that install ClickOnce applications programmatically. 例如,你可以将此类用于 (SMS) 环境中的受控系统管理软件,或者你需要在本地计算机上执行许多安装前或安装后操作的复杂安装的情况下使用此类。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. 创建 InPlaceHostingManager 的一个新实例。Create a new instance of InPlaceHostingManager.

  2. 使用下载部署清单 GetManifestAsyncDownload the deployment manifest by using GetManifestAsync.

  3. 使用适当的权限检查应用程序是否可以使用适当的权限运行 AssertApplicationRequirementsCheck that the application can be run with the appropriate permissions by using AssertApplicationRequirements.

  4. 使用下载并安装应用程序 DownloadApplicationAsyncDownload and install the application by using DownloadApplicationAsync.

  • 如果按顺序调用这些参数中的任何一个,它们将引发异常。If you call any of these parameters out of order, they will throw an exception.

InPlaceHostingManager 可以安装 ClickOnce 应用程序,但不能执行它。InPlaceHostingManager can install a ClickOnce application, but cannot execute it. 此类中的某些方法(如 Execute )是在下载在 Web 浏览器中运行的基于 Windows Presentation Foundation 的应用程序时保留使用的。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.

若要使用 InPlaceHostingManager 下载和安装应用程序,你必须确保用于对你计划安装的 ClickOnce 应用程序进行签名的证书已作为受信任的发布者安装在客户端计算机上。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.

备注

目前,在 InPlaceHostingManager 使用 Visual Studio 调试代码时,产品限制会阻止正常运行。There is currently a product limitation that prevents InPlaceHostingManager from working correctly when you debug your code using Visual Studio. 如果使用 F5 键调试 Visual Studio 中的应用程序,则在调用时,此示例将引发神秘的异常 DownloadApplicationAsyncIf you debug your application in Visual Studio by using the F5 key, the sample will throw mysterious exceptions when you call DownloadApplicationAsync. 若要使用 Visual Studio 进行调试,请在不调试的情况下启动应用程序,然后附加调试器。To debug using Visual Studio, start the application without debugging, and then attach the debugger. 或者,可以使用其他调试器,如 WinDbg。Alternatively, you can use another debugger, such as WinDbg.

构造函数

InPlaceHostingManager(Uri)

创建 InPlaceHostingManager 的一个新实例以下载和安装浏览器承载的指定应用程序。Creates a new instance of InPlaceHostingManager to download and install the specified browser-hosted application.

InPlaceHostingManager(Uri, Boolean)

创建 InPlaceHostingManager 的一个新实例以下载和安装指定的应用程序,该应用程序可以是基于 Windows 窗体的独立应用程序,也可以是承载在 Web 浏览器中的应用程序。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.

方法

AssertApplicationRequirements()

确定 ClickOnce 应用程序是否具有合适的权限和平台依赖项,以便在本地计算机上运行。Determines whether the ClickOnce application has the appropriate permissions and platform dependencies to run on the local computer.

AssertApplicationRequirements(Boolean)

确定 ClickOnce 应用程序是否具有合适的权限和平台依赖项,以便在本地计算机上运行。Determines whether the ClickOnce application has the appropriate permissions and platform dependencies to run on the local computer.

CancelAsync()

取消异步下载操作。Cancels an asynchronous download operation.

Dispose()

释放由 InPlaceHostingManager 使用的所有资源。Releases all resources used by the InPlaceHostingManager.

DownloadApplicationAsync()

在后台下载应用程序更新。Downloads an application update in the background.

Equals(Object)

确定指定对象是否等于当前对象。Determines whether the specified object is equal to the current object.

(继承自 Object)
Execute()

当且仅当它是在 Web 浏览器中运行的基于 Windows Presentation Foundation 的应用程序时,才会启动 ClickOnce 应用程序。Launches the ClickOnce application, if and only if it is a Windows Presentation Foundation-based application running in a Web browser.

GetHashCode()

作为默认哈希函数。Serves as the default hash function.

(继承自 Object)
GetManifestAsync()

在后台下载 ClickOnce 应用程序的部署清单,并在操作完成或遇到错误时引发事件。Downloads the deployment manifest of the ClickOnce application in the background, and raises an event when the operation has either completed or encountered an error.

GetType()

获取当前实例的 TypeGets the Type of the current instance.

(继承自 Object)
MemberwiseClone()

创建当前 Object 的浅表副本。Creates a shallow copy of the current Object.

(继承自 Object)
ToString()

返回表示当前对象的字符串。Returns a string that represents the current object.

(继承自 Object)
UninstallCustomAddIn(String)

删除应用程序中以前安装的用户定义组件。Removes a previously installed user-defined component of an application.

UninstallCustomUXApplication(String)

删除包含 customUX 元素的 ClickOnce 应用 < 程序 > 。Removes a ClickOnce application that includes the <customUX> element.

事件

DownloadApplicationCompleted

应用程序向本地计算机下载完成时发生。Occurs when the application has finished downloading to the local computer.

DownloadProgressChanged

更改应用程序或清单下载状态时发生。Occurs when there is a change in the status of an application or manifest download.

GetManifestCompleted

部署清单已下载到本地计算机时发生。Occurs when the deployment manifest has been downloaded to the local computer.

适用于