InPlaceHostingManager InPlaceHostingManager InPlaceHostingManager InPlaceHostingManager Class

定義

在電腦上安裝或更新 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
繼承
InPlaceHostingManagerInPlaceHostingManagerInPlaceHostingManagerInPlaceHostingManager
實作

範例

下列程式碼範例示範如何使用InPlaceHostingManager安裝ClickOnceClickOnce應用程式以程式設計方式在用戶端電腦上。The following code example shows how to use InPlaceHostingManager to install a ClickOnceClickOnce 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撰寫程式的該安裝ClickOnceClickOnce應用程式以程式設計的方式。You can use InPlaceHostingManager to write programs that install ClickOnceClickOnce 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 可以安裝ClickOnceClickOnce應用程式,但無法執行。InPlaceHostingManager can install a ClickOnceClickOnce application, but cannot execute it. 某些方法,在此類別,例如Execute,已保留供下載的 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若要下載並安裝應用程式,您必須確定憑證來簽署ClickOnceClickOnce想要安裝的應用程式用戶端電腦上已安裝為受信任的發行者。To use InPlaceHostingManager to download and install applications, you must make sure that the certificate for signing the ClickOnceClickOnce 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. 如果您偵錯您的應用程式,在 Visual Studio 中使用 F5 鍵,此範例會擲回神祕的例外狀況時呼叫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(Uri) InPlaceHostingManager(Uri) InPlaceHostingManager(Uri)

建立 InPlaceHostingManager 的新執行個體,以下載及安裝指定的瀏覽器架構應用程式。Creates a new instance of InPlaceHostingManager to download and install the specified browser-hosted application.

InPlaceHostingManager(Uri, Boolean) InPlaceHostingManager(Uri, Boolean) InPlaceHostingManager(Uri, Boolean) InPlaceHostingManager(Uri, Boolean)

建立 InPlaceHostingManager 的新執行個體,以下載及安裝指定的應用程式;這個應用程式可以是獨立的 Windows Form 架構應用程式或是裝載在 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() AssertApplicationRequirements() AssertApplicationRequirements() AssertApplicationRequirements()

判斷 ClickOnceClickOnce 應用程式是否有適當的使用權限和平台相依性,得以在本機電腦上執行。Determines whether the ClickOnceClickOnce application has the appropriate permissions and platform dependencies to run on the local computer.

AssertApplicationRequirements(Boolean) AssertApplicationRequirements(Boolean) AssertApplicationRequirements(Boolean) AssertApplicationRequirements(Boolean)

判斷 ClickOnceClickOnce 應用程式是否有適當的使用權限和平台相依性,得以在本機電腦上執行。Determines whether the ClickOnceClickOnce application has the appropriate permissions and platform dependencies to run on the local computer.

CancelAsync() CancelAsync() CancelAsync() CancelAsync()

取消非同步下載作業。Cancels an asynchronous download operation.

Dispose() Dispose() Dispose() Dispose()

釋放 InPlaceHostingManager 所使用的所有資源。Releases all resources used by the InPlaceHostingManager.

DownloadApplicationAsync() DownloadApplicationAsync() DownloadApplicationAsync() DownloadApplicationAsync()

在背景中下載應用程式更新。Downloads an application update in the background.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

判斷指定的物件是否等於目前的物件。Determines whether the specified object is equal to the current object.

(Inherited from Object)
Execute() Execute() Execute() Execute()

啟動 ClickOnceClickOnce 應用程式,但僅限此應用程式是正在 Web 瀏覽器中執行之 Windows Presentation Foundation 架構應用程式的情況。Launches the ClickOnceClickOnce application, if and only if it is a Windows Presentation Foundation-based application running in a Web browser.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

做為預設雜湊函式。Serves as the default hash function.

(Inherited from Object)
GetManifestAsync() GetManifestAsync() GetManifestAsync() GetManifestAsync()

在幕後下載 ClickOnceClickOnce 應用程式的部署資訊清單,並在作業完成或發生錯誤時引發事件。Downloads the deployment manifest of the ClickOnceClickOnce application in the background, and raises an event when the operation has either completed or encountered an error.

GetType() GetType() GetType() GetType()

取得目前執行個體的 TypeGets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

建立目前 Object 的淺層複本 (Shallow Copy)。Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

傳回代表目前物件的字串。Returns a string that represents the current object.

(Inherited from Object)
UninstallCustomAddIn(String) UninstallCustomAddIn(String) UninstallCustomAddIn(String) UninstallCustomAddIn(String)

移除先前所安裝之應用程式的使用者定義元件。Removes a previously installed user-defined component of an application.

UninstallCustomUXApplication(String) UninstallCustomUXApplication(String) UninstallCustomUXApplication(String) UninstallCustomUXApplication(String)

移除包含 <customUX> 項目的 ClickOnceClickOnce 應用程式。Removes a ClickOnceClickOnce application that includes the <customUX> element.

事件

DownloadApplicationCompleted DownloadApplicationCompleted DownloadApplicationCompleted DownloadApplicationCompleted

在應用程式已完成下載至本機電腦時發生。Occurs when the application has finished downloading to the local computer.

DownloadProgressChanged DownloadProgressChanged DownloadProgressChanged DownloadProgressChanged

在應用程式或資訊清單下載狀態變更時發生。Occurs when there is a change in the status of an application or manifest download.

GetManifestCompleted GetManifestCompleted GetManifestCompleted GetManifestCompleted

在部署資訊清單已下載至本機電腦時發生。Occurs when the deployment manifest has been downloaded to the local computer.

適用於