InPlaceHostingManager.GetManifestAsync Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Pobiera manifest wdrożenia aplikacji ClickOnce w tle i zgłasza zdarzenie po zakończeniu operacji lub napotkaniu błędu.
public:
void GetManifestAsync();
public void GetManifestAsync ();
member this.GetManifestAsync : unit -> unit
Public Sub GetManifestAsync ()
Przykłady
W poniższych przykładach kodu pokazano, jak wywołać metodę GetManifestAsync . Procedura obsługi wywołania zwrotnego zdarzeń GetManifestCompleted sprawdza, czy pobieranie manifestu zakończyło się pomyślnie, a jeśli tak, wyświetla użytkownikowi dodatkowe informacje o aplikacji. Jeśli użytkownik zgadza się kontynuować instalację, program obsługi wywołuje metodę DownloadApplicationAsync.
W poniższych przykładach kodu założono, że już zdefiniowano i utworzono wystąpienie InPlaceHostingManager o nazwie iphm.
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;
}
*/
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
iphm.GetManifestCompleted += new EventHandler<GetManifestCompletedEventArgs>(iphm_GetManifestCompleted);
iphm.GetManifestAsync();
Uwagi
Aby otrzymywać powiadomienia o zakończeniu tego zdarzenia, utwórz program obsługi zdarzeń dla GetManifestCompleted zdarzenia. Jeśli to zdarzenie jest wywoływane i żaden błąd nie jest wskazywany przez GetManifestCompletedEventArgspolecenie , należy wykonać następne wywołanie AssertApplicationRequirements , aby sprawdzić, czy aplikacja będzie miała uprawnienia do uruchamiania na komputerze lokalnym.