Probleme mit Sicherheit, Versionsverwaltung und Manifesten in ClickOnce-Bereitstellungen

Es gibt eine Vielzahl von Problemen mit der ClickOnce-Sicherheit, der Versionsverwaltung von Anwendungen sowie der Manifestsyntax und -semantik, die dazu führen können, dass eine ClickOnce-Bereitstellung nicht erfolgreich ist.

ClickOnce und Windows Benutzerkontensteuerung

In Windows Vista und späteren Versionen von Windows werden Anwendungen standardmäßig als Standardbenutzer ausgeführt, auch wenn der aktuelle Benutzer mit einem Konto mit Administratorberechtigungen angemeldet ist. Wenn eine Anwendung eine Aktion ausführen muss, die Administratorberechtigungen erfordert, teilt sie dies dem Betriebssystem mit, das den Benutzer dann auffordert, seine Administratoranmeldeinformationen einzugeben. Dieses Feature namens Benutzerkontensteuerung (User Account Control, UAC) verhindert, dass Anwendungen ohne explizite Genehmigung eines Benutzers Änderungen vornehmen, die sich auf das gesamte Betriebssystem auswirken können. Windows-Anwendungen erklären, dass sie diese Berechtigungserweiterung benötigen, indem sie das requestedExecutionLevel-Attribut im trustInfo-Abschnitt ihres Anwendungsmanifests angeben.

Aufgrund des Risikos, dass Anwendungen durch die Sicherheitserhöhung Angriffen ausgesetzt werden, können ClickOnce-Anwendungen keine Rechteerweiterungen anfordern, wenn Benutzerkontensteuerung für den Client aktiviert ist. Jede ClickOnce-Anwendung, die versucht, ihr requestedExecutionLevel-Attribut auf requireAdministrator oder highestAvailable festzulegen, wird unter Windows Vista und späteren Versionen von Windows nicht installiert.

In einigen Fällen versucht Ihre ClickOnce-Anwendung aufgrund der Installationserkennungslogik unter Windows möglicherweise die Ausführung mit Administratorberechtigungen. In diesem Fall können Sie das requestedExecutionLevel-Attribut im Anwendungsmanifest auf asInvoker festlegen. Dies führt dazu, dass die Anwendung selbst ohne Rechteerweiterungen 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 MSI-Technologie (Windows Installer) in Erwägung ziehen. Weitere Informationen finden Sie unter Grundlagen von Windows Installer.

Onlineanwendungskontingente und teilweise vertrauenswürdige Anwendungen

Wenn Ihre ClickOnce-Anwendung online anstatt über eine Installation ausgeführt wird, muss sie in das für Onlineanwendungen festgelegte Kontingent passen. Außerdem darf eine Netzwerkanwendung, die mit teilweiser Vertrauenswürdigkeit ausgeführt wird (z. B. mit einem eingeschränkten Satz von Sicherheitsberechtigungen), nicht größer als die Hälfte der Kontingentgröße sein.

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

Versionsprobleme

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

Angenommen, Sie verfügen über eine Assembly mit starkem Namen in einem 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 Ihre Hauptanwendung enthält. Wenn Sie die Assembly aktualisieren, die Version auf 1.0.0.1 erhöhen und versuchen, sie bereitzustellen, ohne auch die Anwendung 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 beispielsweise 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, im Anwendungsmanifest als Abhängigkeit angegeben wird.

Probleme bei der Manifestanalyse

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

In einer Manifestdatei können Probleme auftreten, wenn Sie einen Namen für Ihre Anwendung auswählen, der ein Sonderzeichen enthält, z. B. ein einzelnes oder doppeltes Anführungszeichen. Der Name der Anwendung ist Teil ihrer ClickOnce-Identität. ClickOnce analysiert derzeit keine Identitäten, die Sonderzeichen enthalten. Wenn ihre Anwendung nicht aktiviert werden kann, stellen Sie sicher, dass Sie nur alphabetische und numerische Zeichen für den Namen verwenden, und versuchen Sie dann erneut, sie bereitzustellen.

Wenn Sie Ihre Bereitstellungs- oder Anwendungsmanifeste manuell bearbeitet haben, haben Sie sie möglicherweise versehentlich beschädigt. Ein beschädigtes Manifest verhindert eine ordnungsgemäße 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 Meldungen 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 verstößt. Wenn Sie Ihren Manifesten XML manuell 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 publicKeyToken-Attributen eindeutig sein. Wenn beide Attribute für zwei Elemente innerhalb eines Manifests übereinstimmen, ist die Manifestanalyse nicht erfolgreich.

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 Hashwert dieser Datei und ihre digitale Signatur enthält.

Vorsichtsmaßnahmen bei Verwendung des Bereitstellungsanbieters

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

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

Dieser Pfad wird festgelegt, wenn ClickOnce die Anwendung erstellt, und er ist für installierte Anwendungen obligatorisch. Der Pfad verweist auf den Standardspeicherort, an dem das ClickOnce-Installationsprogramm die Anwendung installiert und nach Updates sucht. Wenn Sie den xcopy-Befehl verwenden, um eine ClickOnce-Anwendung an einen anderen Speicherort zu kopieren, aber die deploymentProvider-Eigenschaft nicht ändern, verweist ClickOnce weiterhin auf den ursprünglichen Speicherort, wenn versucht wird, 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 aus dem neuen Speicherort installiert wird. Die Aktualisierung dieses Pfads ist vor allem dann von Bedeutung, wenn Sie Anwendungen installiert haben. Für Onlineanwendungen, die immer über die ursprüngliche URL gestartet werden, ist die deploymentProvider-Einstellung optional. Wenn deploymentProvider festgelegt ist, wird dies 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 von ClickOnce-BereitstellungenSichern von ClickOnce-AnwendungenAuswählen einer ClickOnce-Bereitstellungsstrategie