Freigeben über


Sicherheits-, Versionsverwaltungs- und Manifestprobleme in ClickOnce-Bereitstellungen

Es gibt eine Vielzahl von Problemen mit ClickOnce-Sicherheit, Anwendungsversionsverwaltung und Manifestsyntax und Semantik, die dazu führen können, dass eine ClickOnce-Bereitstellung nicht erfolgreich ist.

ClickOnce- und Windows-Benutzerkontensteuerung

In Windows Vista und höheren Versionen von Windows werden Anwendungen standardmäßig als Standardbenutzer ausgeführt, auch wenn der aktuelle Benutzer mit einem Konto angemeldet ist, das über Administratorberechtigungen verfügt. Wenn eine Anwendung eine Aktion ausführen muss, die Administratorberechtigungen erfordert, teilt sie dem Betriebssystem mit, wodurch der Benutzer aufgefordert wird, seine Administratoranmeldeinformationen einzugeben. Dieses Feature, das als Benutzerkontensteuerung (User Account Control, UAC) bezeichnet wird, verhindert, dass Anwendungen Änderungen vornehmen, die sich auf das gesamte Betriebssystem ohne explizite Genehmigung eines Benutzers auswirken können. Windows-Anwendungen deklarieren, dass sie diese Berechtigungserweiterung erfordern, indem sie das requestedExecutionLevel Attribut im trustInfo Abschnitt ihres Anwendungsmanifests angeben.

Aufgrund des Risikos, Dass Anwendungen Sicherheitserweiterungsangriffen ausgesetzt werden, können ClickOnce-Anwendungen keine Berechtigungserweiterung anfordern, wenn UAC für den Client aktiviert ist. Jede ClickOnce-Anwendung, die versucht, ihr requestedExecutionLevel-Attribut auf requireAdministrator oder highestAvailable festzulegen, wird nicht unter Windows Vista und höheren Versionen installiert.

In einigen Fällen versucht Ihre ClickOnce-Anwendung möglicherweise, aufgrund von Installations-Erkennungslogik unter Windows mit Administratorberechtigungen ausgeführt zu werden. In diesem Fall können Sie das requestedExecutionLevel Attribut im Anwendungsmanifest auf asInvokerfestlegen. Dies führt dazu, dass die Anwendung selbst ohne Erhöhung ausgeführt wird. Visual Studio fügt dieses Attribut automatisch allen Anwendungsmanifesten hinzu.

Wenn Sie eine Anwendung entwickeln, die Administratorberechtigungen für die gesamte Lebensdauer der Anwendung erfordert, sollten Sie stattdessen die Bereitstellung der Anwendung mithilfe der Windows Installer-Technologie (MSI) in Betracht ziehen. Weitere Informationen finden Sie in den Grundlagen von Windows Installer.

Onlineanwendungskontingente und teilweise vertrauenswürdige Anwendungen

Wenn Ihre ClickOnce-Anwendung online statt über eine Installation ausgeführt wird, muss sie in das Kontingent passen, das für Onlineanwendungen vorgesehen ist. Außerdem kann eine Netzwerkanwendung, die teilweise vertrauenswürdig ausgeführt wird, z. B. mit einer eingeschränkten Gruppe von Sicherheitsberechtigungen, nicht größer als die Hälfte der Kontingentgröße sein.

Hinweis

In ClickOnce für .NET Core und .NET 5 oder höher wird eine teilweise Vertrauensstellung, die Codezugriffssicherheit erfordert, nicht unterstützt. In .NET Framework ist die Verwendung von Code Access Security keine bewährte Methode und wird nicht empfohlen.

Weitere Informationen und Anweisungen zum Ändern des Onlineanwendungskontingents finden Sie in der ClickOnce-Cacheübersicht.

Versionsverwaltungsprobleme

Möglicherweise treten Probleme auf, wenn Sie Ihrer Assembly starke Namen zuweisen und die Assemblyversionsnummer erhöhen, um ein Anwendungsupdate widerzuspiegeln. Jede Assembly, die mit einem Verweis auf eine Assembly mit starkem Namen kompiliert wurde, muss selbst neu kompiliert werden, oder die Assembly wird versuchen, auf die ältere Version zu verweisen. Die Assembly versucht dies, da die Assembly den alten Versionswert in der Bindungsanforderung verwendet.

Angenommen, Sie haben eine Assembly mit einem starken Namen in Ihrem eigenen Projekt mit Version 1.0.0.0. Nachdem Sie die Assembly kompiliert haben, fügen Sie sie als Verweis auf das Projekt hinzu, das die Hauptanwendung enthält. Wenn Sie die Assembly aktualisieren, die Version auf 1.0.0.1 erhöhen und versuchen, sie bereitzustellen, ohne die Anwendung auch neu zu kompilieren, kann die Anwendung die Assembly zur Laufzeit nicht laden.

Dieser Fehler kann nur auftreten, wenn Sie Ihre ClickOnce-Manifeste manuell bearbeiten. Dieser Fehler sollte nicht auftreten, wenn Sie Ihre Bereitstellung mit Visual Studio generieren.

Angeben einzelner .NET Framework-Assemblys im Manifest

Ihre Anwendung kann nicht geladen werden, wenn Sie eine ClickOnce-Bereitstellung manuell bearbeitet haben, um auf eine ältere Version einer .NET Framework-Assembly zu verweisen. Wenn Sie z. B. einen Verweis auf die System.Net Assembly für eine Version von .NET Framework vor der im Manifest angegebenen Version hinzugefügt haben, tritt ein Fehler auf. Im Allgemeinen sollten Sie nicht versuchen, Verweise auf einzelne .NET Framework-Assemblys anzugeben, da die Version von .NET Framework, für die ihre Anwendung ausgeführt wird, als Abhängigkeit im Anwendungsmanifest angegeben wird.

Manifest-Parsing-Probleme

Die von ClickOnce verwendeten Manifestdateien sind XML-Dateien und müssen sowohl wohlgeformt als auch gültig sein: Sie müssen den XML-Syntaxregeln entsprechen und nur Elemente und Attribute verwenden, die im relevanten XML-Schema definiert sind.

Etwas, das zu Problemen in einer Manifestdatei führen kann, besteht darin, einen Namen für Ihre Anwendung auszuwählen, der ein Sonderzeichen enthält, z. B. ein einzelnes oder doppeltes Anführungszeichen. Der Name der Anwendung ist Teil der ClickOnce-Identität. ClickOnce analysiert derzeit keine Identitäten, die Sonderzeichen enthalten. Wenn die Anwendung nicht aktiviert werden kann, stellen Sie sicher, dass Sie nur alphabetische und numerische Zeichen für den Namen verwenden, und versuchen Sie erneut, sie bereitzustellen.

Wenn Sie Ihre Bereitstellungs- oder Anwendungsmanifeste manuell bearbeitet haben, haben Sie diese möglicherweise versehentlich beschädigt. Beschädigtes Manifest verhindert eine korrekte ClickOnce-Installation. Sie können solche Fehler zur Laufzeit debuggen, indem Sie im Dialogfeld ClickOnce-Fehler auf Details klicken und die Fehlermeldung im Protokoll lesen. Das Protokoll listet eine der folgenden Nachrichten auf:

  • Eine Beschreibung des Syntaxfehlers sowie die Zeilennummer und die Zeichenposition, an der der Fehler aufgetreten ist.

  • Der Name eines Elements oder Attributs, das gegen das Schema des Manifests verwendet wird. Wenn Sie XML manuell zu Ihren Manifesten hinzugefügt haben, müssen Sie ihre Ergänzungen mit den Manifestschemas vergleichen. Weitere Informationen finden Sie unter ClickOnce-Bereitstellungsmanifest und ClickOnce-Anwendungsmanifest.

  • Ein ID-Konflikt. Abhängigkeitsverweise in Bereitstellungs- und Anwendungsmanifesten müssen sowohl in ihren name als auch in ihren publicKeyToken Attributen eindeutig sein. Wenn beide Attribute zwischen zwei Elementen innerhalb eines Manifests übereinstimmen, schlägt das Parsen des Manifests fehl.

Vorsichtsmaßnahmen beim manuellen Ändern von Manifesten oder Anwendungen

Wenn Sie ein Anwendungsmanifest aktualisieren, müssen Sie sowohl das Anwendungsmanifest als auch das Bereitstellungsmanifest erneut signieren. Das Bereitstellungsmanifest enthält einen Verweis auf das Anwendungsmanifest, das den Hash dieser Datei und die digitale Signatur enthält.

Vorsichtsmaßnahmen bei der Verwendung des Bereitstellungsanbieters

Das ClickOnce-Bereitstellungsmanifest verfügt über eine deploymentProvider Eigenschaft, die auf den vollständigen Pfad des Speicherorts verweist, von dem die Anwendung installiert und gewartet werden soll:

<deploymentProvider codebase="http://myserver/myapp.application" />

Dieser Pfad wird festgelegt, wenn ClickOnce die Anwendung erstellt und für installierte Anwendungen obligatorisch ist. Der Pfad verweist auf den Standardspeicherort, an dem das ClickOnce-Installationsprogramm die Anwendung installiert und nach Updates sucht. Wenn Sie den Befehl "xcopy " verwenden, um eine ClickOnce-Anwendung an einen anderen Speicherort zu kopieren, aber deploymentProvider die Eigenschaft nicht ändern, verweist ClickOnce weiterhin auf den ursprünglichen Speicherort, wenn versucht, die Anwendung herunterzuladen.

Wenn Sie eine Anwendung verschieben oder kopieren möchten, müssen Sie auch den deploymentProvider Pfad aktualisieren, damit der Client tatsächlich vom neuen Speicherort installiert wird. Das Aktualisieren dieses Pfads ist hauptsächlich ein Problem, wenn Sie Anwendungen installiert haben. Bei Onlineanwendungen, die immer über die ursprüngliche URL gestartet werden, ist die deploymentProvider Einstellung optional. Wenn deploymentProvider diese Einstellung festgelegt ist, wird sie berücksichtigt. Andernfalls wird die ZUM Starten der Anwendung verwendete URL als Basis-URL zum Herunterladen von Anwendungsdateien verwendet.

Hinweis

Jedes Mal, wenn Sie das Manifest aktualisieren, müssen Sie es auch erneut signieren.

Problembehandlung bei ClickOnce-BereitstellungenSichern von ClickOnce-AnwendungenAuswählen einer ClickOnce-Bereitstellungsstrategie