Zugreifen auf lokale und Remotedaten in einer ClickOnce-Anwendung

Die meisten Anwendungen nutzen oder generieren Daten. ClickOnce bietet zahlreiche Optionen, um Daten sowohl lokal als auch im Remotebetrieb zu lesen und zu schreiben.

Lokale Daten

Mit ClickOnce können Sie Daten mithilfe einer der folgenden Methoden lokal 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 bei der Installation der Anwendung in dieses Verzeichnis kopiert. Datendateien können einen beliebigen Datentyp aufweisen, die gängigsten Dateitypen sind jedoch Text-, XML- und Datenbankdateien, z. B. Microsoft Access-Dateien (.mdb).

Das Datenverzeichnis ist für anwendungsverwaltete Daten bestimmt, d. h. für Daten, die die Anwendung explizit speichert und verwaltet. Alle statischen, unabhängigen Dateien, die im Anwendungsmanifest nicht als "Datendateien" gekennzeichnet sind, werden hingegen im Anwendungsverzeichnis gespeichert, also in dem Verzeichnis, in dem sich auch die ausführbaren Dateien (.exe) und die Assemblys der Anwendung befinden.

Tipp

Wenn eine ClickOnce-Anwendung deinstalliert wird, wird das zugehörige Datenverzeichnis ebenfalls entfernt. Speichern Sie im Datenverzeichnis keine Daten, die von Endbenutzern verwaltet werden, z. B. Dokumente.

Markieren von Datendateien in einer ClickOnce-Verteilung

Um eine vorhandene Datei im Datenverzeichnis speichern zu können, müssen Sie die vorhandene Datei in der Anwendungsmanifestdatei der ClickOnce-Anwendung als Datendatei kennzeichnen. Weitere Informationen hierzu finden Sie unter Gewusst wie: Einschließen einer Datendatei in eine ClickOnce-Anwendung.

Lesen aus dem und Schreiben in das Datenverzeichnis

Für das Lesen aus dem Datenverzeichnis muss die ClickOnce-Anwendung eine Leseberechtigung anfordern. Entsprechend ist für das Schreiben in das Verzeichnis eine Schreibberechtigung erforderlich. Wenn die Anwendung so konfiguriert ist, dass sie mit der Einstellung Voll vertrauenswürdig ausgeführt wird, verfügt sie automatisch über diese Berechtigung. Weitere Informationen zum Erweitern von Berechtigungen für die Anwendung unter Verwendung der Berechtigungserweiterung oder der Bereitstellung vertrauenswürdiger Anwendungen finden Sie unter Sichern von ClickOnce-Anwendungen.

Tipp

Wenn in Ihrer Organisation die Bereitstellung vertrauenswürdiger Anwendungen nicht verwendet wird und die Berechtigungserweiterung deaktiviert ist, schlägt das Anfordern von Berechtigungen fehl.

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

If (ApplicationDeployment.IsNetworkDeployed) Then
    Dim SR As StreamReader = Nothing

    Try
        SR = New StreamReader(ApplicationDeployment.CurrentDeployment.DataDirectory & "\CSV.txt")
        MessageBox.Show(SR.ReadToEnd())
    Catch Ex As Exception
        MessageBox.Show("Could not read file.")
    Finally
        SR.Close()
    End Try
End If
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 Bereitstellungsdateien als Datendateien finden Sie unter Gewusst wie: Einschließen einer Datendatei in eine ClickOnce-Anwendung.

Sie können den Pfad zum Datenverzeichnis auch mit den relevanten Variablen der Application-Klasse abrufen, z. B. mit LocalUserAppDataPath.

Zum Bearbeiten anderer Dateitypen sind möglicherweise zusätzliche Berechtigungen erforderlich. Wenn Sie beispielsweise eine Access-Datenbankdatei (.mdb) verwenden möchten, muss die Anwendung volle Vertrauenswürdigkeit anfordern, um die entsprechenden 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 in der Bereitstellung Datendateien enthalten sind, damit die Anwendung über einen Speicherort zum Erstellen neuer Datendateien während der Laufzeit verfügt. Wenn eine neue Version einer Anwendung installiert wird, kopiert ClickOnce alle vorhandenen Datendateien aus dem Datenverzeichnis der vorherigen Version in das der neuen Version. Dabei ist es unerheblich, ob diese Datendateien ursprünglich in der Bereitstellung enthalten waren oder von der Anwendung erstellt wurden.

Weist eine Datendatei in der älteren Version der Anwendung einen anderen Hashwert auf als in der neueren Version, ersetzt ClickOnce die ältere Version der Datei durch die neuere Serverversion. Wenn von der vorherigen Version der Anwendung eine neue Datei erstellt wurde, deren Name mit dem einer Datei in der Bereitstellung der neuen Version übereinstimmt, überschreibt ClickOnce die Datei aus der alten Version mit der neuen Datei. In beiden Fällen bleiben die alten Dateien in einem Unterverzeichnis des Datenverzeichnisses mit dem Namen .pre erhalten, damit die Anwendung zu Migrationszwecken weiterhin auf die alten Daten zugreifen kann.

Wenn eine feinere Abstimmung der Datenmigration erforderlich ist, können Sie mithilfe der API für die ClickOnce-Bereitstellung eine benutzerdefinierte Migration vom alten zum neuen Datenverzeichnis durchführen. Dabei suchen Sie zunächst mithilfe von IsFirstRun ein verfügbares Download, laden das Update mit Update oder UpdateAsync herunter und führen nach abgeschlossenem Update die benutzerdefinierten Schritte zur Datenmigration selbst aus.

Isolierte Speicherung

Isolierter Speicher stellt eine einfache API für das Erstellen von und das Zugreifen auf Dateien bereit. Der eigentliche Speicherort der Dateien bleibt sowohl dem Entwickler als auch dem Benutzer verborgen.

Der isolierte Speicher wird in allen Versionen von .NET Framework unterstützt. Er funktioniert auch in teilweise vertrauenswürdigen Anwendungen, ohne dass zusätzliche Berechtigungen gewährt werden müssen. Die Verwendung von isoliertem Speicher empfiehlt sich, wenn eine Anwendung mit teilweiser Vertrauenswürdigkeit ausgeführt werden muss, anwendungsspezifische Daten jedoch beibehalten werden müssen.

Weitere Informationen hierzu finden Sie unter Isolierte Speicherung.

Andere lokale Dateien

Wenn in einer Anwendung Endbenutzerdaten (z. B. Berichte, Bilder, Musik usw.) bearbeitet oder gespeichert werden sollen, muss die Anwendung über FileIOPermission verfügen, um Daten aus dem lokalen Dateisystem zu lesen und in dieses zu schreiben.

Remotedaten

Die meisten Anwendungen müssen zu irgendeinem Zeitpunkt Informationen von einer Remotewebsite abrufen, z. B. Kundendaten oder Marktinformationen. In diesem Abschnitt werden die gängigsten Verfahren für das Abrufen von Remotedaten erläutert.

Zugreifen auf Dateien über HTTP

Sie können entweder die WebClient-Klasse oder die HttpWebRequest-Klasse im System.Net-Namespace verwenden, um auf Daten auf einem Webserver zuzugreifen. 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 Einlesen 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-Anwendungen.

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 mithilfe von 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.

Eine andere Möglichkeit besteht darin, Visual Studio zu verwenden. Weitere Informationen finden Sie unter Gewusst wie: Hinzufügen und Entfernen von Webverweisen und Gewusst wie: Hinzufügen und Entfernen von Webverweisen und Gewusst wie: Hinzufügen und Entfernen von Webverweisen.  

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 OleDbPermission angefordert werden.

In den meisten Fällen ist ein 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.

Siehe auch

Aufgaben

Gewusst wie: Einschließen einer Datendatei in eine ClickOnce-Anwendung