Zugreifen auf lokale und Remotedaten in einer ClickOnce-Anwendung

Die meisten Anwendungen nutzen oder generieren Daten. ClickOnce bietet Ihnen eine Vielzahl von Optionen zum Lesen und Schreiben von Daten, sowohl lokal als auch remote.

Lokale Daten

Mit ClickOnce können Sie Daten lokal mithilfe einer der folgenden Methoden laden und speichern:

  • ClickOnce-Datenverzeichnis

  • Isolierte Speicherung

  • Andere lokale Dateien

ClickOnce-Datenverzeichnis

Jede auf einem lokalen Computer installierte ClickOnce-Anwendung verfügt über ein Datenverzeichnis, das im Ordner „Dokumente und Einstellungen“ des Benutzers gespeichert ist. Jede in einer ClickOnce-Anwendung enthaltene und als „Datendatei“ gekennzeichnete Datei wird in dieses Verzeichnis kopiert, wenn eine Anwendung installiert wird. Datendateien können einen beliebigen Dateityp aufweisen. Zu den am häufigsten verwendeten gehören Text, XML und Datenbankdateien, z. B. Microsoft Access-MDB-Dateien.

Das Datenverzeichnis ist für anwendungsverwaltete Daten konzipiert, d. h. für Daten, die die Anwendung explizit speichert und verwaltet. Alle statischen, unabhängigen Dateien, die im Anwendungsmanifest nicht als "Daten"gekennzeichnet sind, befinden sich dagegen im Anwendungsverzeichnis. Dieses Verzeichnis ist der Ort, an dem sich die ausführbaren Dateien (.exe) und die Assemblys der Anwendung befinden.

Hinweis

Wenn eine ClickOnce-Anwendung deinstalliert wird, wird das zugehörige Datenverzeichnis ebenfalls entfernt. Verwenden Sie niemals das Datenverzeichnis, um durch den Endbenutzer verwaltete Daten, wie z.B. Dokumente, zu speichern.

Markieren von Datendateien in einer ClickOnce-Distribution

Um eine vorhandene Datei im Datenverzeichnis abzulegen, müssen Sie sie in der Anwendungsmanifestdatei ihrer ClickOnce-Anwendung als Datendatei markieren. Weitere Informationen finden Sie unter How to: Include a Data File in a ClickOnce Application (Vorgehensweise: Hinzufügen einer Datendatei zu einer ClickOnce-Anwendung).

Lesen aus dem Datenverzeichnis und Schreiben in das Datenverzeichnis

Zum Lesen aus dem Datenverzeichnis muss Ihre ClickOnce-Anwendung Leseberechtigung anfordern. Analog dazu erfordert das Schreiben in das Verzeichnis Schreibberechtigung. Ihre Anwendung verfügt automatisch über diese Berechtigung, wenn sie für die Ausführung mit voller Vertrauenswürdigkeit konfiguriert ist. Weitere Informationen zum Erhöhen von Berechtigungen für die Anwendung unter Verwendung der Berechtigungserweiterung oder der Bereitstellung vertrauenswürdiger Anwendungen finden Sie unter Sichern von ClickOnce-Anwendungen.

Hinweis

Wenn Ihre Organisation die Bereitstellung vertrauenswürdiger Anwendungen nicht verwendet und die Berechtigungserweiterung deaktiviert hat, schlägt die Assertion der Berechtigungen fehl.

Nachdem die Anwendung über diese Berechtigungen verfügt, kann sie auf das Datenverzeichnis zugreifen, indem sie Methodenaufrufe für Klassen innerhalb von System.IOverwendet. Sie können den Pfad des Datenverzeichnisses innerhalb einer Windows Forms-ClickOnce-Anwendung mithilfe der in der DataDirectory-Eigenschaft von CurrentDeployment definierten ApplicationDeployment-Eigenschaft abrufen. Dies ist die einfachste und empfohlene Möglichkeit, auf Ihre Daten zuzugreifen. Im folgenden Codebeispiel wird veranschaulicht, wie Sie mit einer Textdatei mit dem Namen CSV.txt vorgehen, die Sie als Datendatei in die Bereitstellung aufgenommen haben.

Hinweis

Die Klasse ApplicationDeployment und die APIs im Namespace System.Deployment.Application werden in .NET Core und .NET 5 und höheren Versionen nicht unterstützt. In .NET 7 wird eine neue Methode für den Zugriff auf Anwendungsbereitstellungseigenschaften unterstützt. Weitere Informationen finden Sie unter Zugreifen auf ClickOnce-Bereitstellungseigenschaften in .NET. .NET 7 unterstützt nicht das Äquivalent von ApplicationDeployment-Methoden.

if (ApplicationDeployment.IsNetworkDeployed)
{
    try
    {
        using (StreamReader sr = new StreamReader(ApplicationDeployment.CurrentDeployment.DataDirectory + @"\CSV.txt"))
        {
            MessageBox.Show(sr.ReadToEnd());
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Could not read file. Error message: " + ex.Message);
    }
}

Weitere Informationen über die Kennzeichnung von Dateien in der Bereitstellung als Datendateien finden Sie unter How to: Include a Data File in a ClickOnce Application.

Sie können den Pfad zum Datenverzeichnis auch mit den relevanten Variablen in der Application -Klasse wie z. B. LocalUserAppDataPathabrufen.

Zum Bearbeiten anderer Typen von Dateien sind möglicherweise zusätzliche Berechtigungen erforderlich. Wenn Sie z. B. eine Access-Datenbankdatei (MDB-Datei) verwenden möchten, muss Ihre Anwendung volle Vertrauenswürdigkeit zusichern, um die relevanten <xref:System.Data>-Klassen verwenden zu können.

Datenverzeichnis und Anwendungsversionen

Jede Version einer Anwendung hat ein eigenes Datenverzeichnis, das von anderen Versionen isoliert ist. ClickOnce erstellt dieses Verzeichnis unabhängig davon, ob Datendateien in der Bereitstellung enthalten sind, damit die Anwendung über einen Speicherort verfügt, um neue Datendateien zur Laufzeit zu erstellen. Wenn eine neue Version einer Anwendung installiert wird, kopiert ClickOnce alle vorhandenen Datendateien aus dem Datenverzeichnis der vorherigen Version in das der neuen Version – unabhängig davon, ob sie in der ursprünglichen Bereitstellung enthalten waren oder von der Anwendung erstellt wurden.

ClickOnce ersetzt die ältere Version der Datei durch die neuere Version des Servers, wenn eine Datendatei in der alten Version der Anwendung einen anderen Hashwert aufweist als in der neuen Version. Wenn die frühere Version der Anwendung eine neue Datei erstellt hat, die denselben Namen aufweist wie eine Datei, die in der Bereitstellung der neuen Version enthalten ist, überschreibt ClickOnce die Datei der alten Version mit der neuen Datei. In beiden Fällen werden die alten Dateien in ein Unterverzeichnis des Datenverzeichnisses mit dem Namen .preeingeschlossen, sodass die Anwendung zu Migrationszwecken weiterhin auf die alten Daten zugreifen kann.

Wenn Sie eine umfassendere Migration von Daten benötigen, können Sie die API für die ClickOnce-Bereitstellung verwenden, um eine benutzerdefinierte Migration vom alten zum neuen Datenverzeichnis durchzuführen. Dabei suchen Sie zunächst mithilfe von IsFirstRuneinen verfügbaren Download, laden das Update mit Update oder UpdateAsyncherunter und führen nach abgeschlossenem Update die benutzerdefinierten Schritte zur Datenmigration selbst aus.

Isolierter Speicher

Die isolierte Speicherung stellt eine API für das Erstellen und den Zugriff auf Dateien über eine einfache API bereit. Der tatsächliche Speicherort der Dateien wird für den Entwickler und Benutzer ausgeblendet.

Isolierter Speicher funktioniert in allen Versionen von .NET Framework. Isolierte Speicherung funktioniert auch in teilweise vertrauenswürdigen Anwendungen, ohne dass zusätzliche Berechtigungen gewährt werden müssen. Sie sollten isolierte Speicherung verwenden, wenn Ihre Anwendung unter teilweiser Vertrauenswürdigkeit ausgeführt werden, dabei aber anwendungsspezifische Daten verwalten muss.

Weitere Informationen finden Sie unter Isolierte Speicherung.

Andere lokale Dateien

Wenn Ihre Anwendung mit Daten von Endbenutzern wie z. B. Berichten, Bildern, Musik usw. arbeiten oder solche Daten speichern muss, benötigt sie FileIOPermission , um Daten im lokalen Dateisystem zu lesen oder in dieses zu schreiben.

Remotedaten

An einem gewissen Punkt wird die Anwendung wahrscheinlich Informationen von einer Remotewebsite, wie z. B. Kundendaten oder Marktinformationen, abrufen müssen. Dieser Abschnitt beschreibt die am häufigsten verwendeten Techniken für das Abrufen von Remotedaten.

Zugreifen auf Dateien mit HTTP

Sie können auf Daten von einem Webserver zugreifen, indem Sie entweder den WebClient oder die HttpWebRequest -Klasse im System.Net -Namespace verwenden. Bei den Daten kann es sich entweder um statische Dateien oder um ASP.NET-Anwendungen handeln, die unformatierten Text oder XML-Daten zurückgeben. Daten im XML-Format können Sie am schnellsten mithilfe der XmlDocument -Klasse abrufen, deren Load -Methode eine URL als Argument verwendet. Ein Beispiel finden Sie unter Lesen eines XML-Dokuments in das DOM.

Wenn die Anwendung über HTTP auf Remotedaten zugreift, spielt auch Sicherheit eine Rolle. Der Zugriff der ClickOnce-Anwendung auf Netzwerkressourcen ist möglicherweise standardmäßig beschränkt. Dies hängt davon ab, wie die Anwendung bereitgestellt wurde. Diese Beschränkungen sollen verhindern, dass bösartige Programme Zugriff auf privilegierte Remotedaten erhalten oder über einen Benutzercomputer andere Computer im Netzwerk angreifen.

In der folgenden Tabelle werden mögliche Bereitstellungsstrategien sowie die entsprechenden Standardwebberechtigungen aufgelistet.

Bereitstellungstyp Standardmäßige Netzwerkberechtigungen
Webinstallation Kann nur auf den Webserver zugreifen, von dem die Anwendung installiert wurde.
Installation von Dateifreigabe Kann auf keine Webserver zugreifen.
Installation von CD-ROM Kann auf jeden beliebigen Webserver zugreifen.

Wenn die ClickOnce-Anwendung aufgrund von Sicherheitsbeschränkungen nicht auf einen Webserver zugreifen kann, muss die Anwendung WebPermission für diese Website bestätigen. Weitere Informationen zum Erhöhen von Sicherheitsberechtigungen für eine ClickOnce-Anwendung finden Sie unter Sichern von ClickOnce-Bereitstellungen.

Zugreifen auf Daten über einen XML-Webdienst

Wenn Sie Daten als XML-Webdienst verfügbar machen, können Sie mithilfe eines XML-Webdienstproxys auf die Daten zugreifen. Der Proxy ist eine .NET Framework-Klasse, die Sie mit Visual Studio erstellen. Die Vorgänge des XML-Webdienstes, z. B. Abrufen von Kunden, Aufgeben von Bestellungen usw., werden als Methoden für den Proxy verfügbar gemacht. Dadurch sind Webdienste viel benutzerfreundlicher als unformatierter Text oder XML-Dateien.

Wenn ein XML-Webdienst über HTTP ausgeführt wird, gelten für den Dienst dieselben Sicherheitsbeschränkungen wie für die WebClient -Klasse und die HttpWebRequest -Klasse.

Direktes Zugreifen auf eine Datenbank

Mithilfe der Klassen im System.Data -Namespace können Sie direkte Verbindungen zu einem Datenbankserver im Netzwerk herstellen, z. B. SQL Server, allerdings sind dabei bestimmte Sicherheitsaspekte zu berücksichtigen. Anders als HTTP-Anforderungen sind Datenbankverbindungsanforderungen in einer teilweise vertrauenswürdigen Umgebung standardmäßig unzulässig. Über die entsprechenden Berechtigungen verfügen Sie standardmäßig nur dann, wenn Sie die ClickOnce-Anwendung von einer CD-ROM installiert haben. Dadurch erhalten Anwendungen volle Vertrauenswürdigkeit. Um den Zugriff auf eine bestimmte SQL Server-Datenbank zu ermöglichen, muss die Anwendung SqlClientPermission für diese Datenbank anfordern. Für den Zugriff auf andere Datenbanken als SQL Server muss OleDbPermissionangefordert werden.

In den meisten Fällen ist direkter Zugriff auf die Datenbank nicht erforderlich, sondern der Zugriff erfolgt über eine in ASP.NET geschriebene Webserveranwendung oder einen XML-Webdienst. Diese Art des Datenbankzugriffs ist häufig die beste Methode, wenn die ClickOnce-Anwendung über einen Webserver bereitgestellt wird. Sie können auf den als teilweise vertrauenswürdig eingestuften Server zugreifen, ohne dass die Berechtigungen der Anwendung erweitert werden müssen.