Freigeben über


Zugreifen auf lokale und Remotedaten in ClickOnce-Anwendungen

Die meisten Anwendungen verbrauchen oder produzieren Daten. ClickOnce bietet Eine Vielzahl von Optionen zum Lesen und Schreiben von Daten sowohl lokal als auch remote.

Lokale Daten

Mit ClickOnce können Sie Daten lokal laden und speichern, indem Sie eine der folgenden Methoden verwenden:

  • ClickOnce-Datenverzeichnis

  • Isolierter Speicher

  • 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 Datei, die in einer ClickOnce-Anwendung enthalten ist und als "Datendatei" gekennzeichnet ist, wird in dieses Verzeichnis kopiert, wenn eine Anwendung installiert wird. Datendateien können von jedem beliebigen Dateityp sein, den am häufigsten verwendeten Typen sind Text-, XML- und Datenbankdateien wie Microsoft Access .mdb-Dateien.

Das Datenverzeichnis ist für anwendungsverwaltete Daten vorgesehen. Dabei handelt es sich um Daten, die die Anwendung explizit speichert und verwaltet. Alle statischen, nicht-abhängige Dateien, die nicht als "Daten" im Anwendungsmanifest gekennzeichnet sind, befinden sich stattdessen im Anwendungsverzeichnis. In diesem Verzeichnis befinden sich die ausführbaren Dateien und Assemblys der Anwendung (.exe).

Hinweis

Wenn eine ClickOnce-Anwendung deinstalliert wird, wird das Datenverzeichnis ebenfalls entfernt. Verwenden Sie niemals das Datenverzeichnis, um vom Endbenutzer verwaltete Daten zu speichern, z. B. Dokumente.

Markieren von Datendateien in einer ClickOnce-Verteilung

Um eine vorhandene Datei in das Datenverzeichnis einzufügen, müssen Sie die vorhandene Datei als Datendatei in der Anwendungsmanifestdatei Ihrer ClickOnce-Anwendung markieren. Weitere Informationen finden Sie unter So fügen Sie eine Datendatei zu einer ClickOnce-Anwendung hinzu.

Lesen und Schreiben in das Datenverzeichnis

Das Lesen aus dem Datenverzeichnis erfordert, dass Ihre ClickOnce-Anwendung die Leseberechtigung anfordert; ähnlich erfordert das Schreiben in das Verzeichnis die Schreibberechtigung. Ihre Anwendung verfügt automatisch über diese Berechtigung, wenn sie für die Ausführung mit "Voll vertrauenswürdig" konfiguriert ist. Weitere Informationen zum Erhöhen von Berechtigungen für Ihre Anwendung mithilfe der Berechtigungserweiterung oder der Bereitstellung vertrauenswürdiger Anwendungen finden Sie unter Secure ClickOnce-Anwendungen.

Hinweis

Wenn Ihre Organisation die Bereitstellung vertrauenswürdiger Anwendungen nicht verwendet und die Berechtigungserhöhung deaktiviert hat, wird das Setzen von Berechtigungen fehlschlagen.

Nachdem Ihre Anwendung über diese Berechtigungen verfügt, kann sie mithilfe von Methodenaufrufen für Klassen innerhalb der System.IODatei auf das Datenverzeichnis zugreifen. Sie können den Pfad des Datenverzeichnisses in einer "Windows Forms ClickOnce-Anwendung" abrufen, indem Sie die DataDirectory Eigenschaft, die auf der CurrentDeployment Eigenschaft von ApplicationDeployment definiert ist, verwenden. Dies ist die bequemste und empfohlene Methode für den Zugriff auf Ihre Daten. Im folgenden Codebeispiel wird veranschaulicht, wie Sie dies für eine Textdatei mit dem Namen CSV.txt tun, die Sie in Der Bereitstellung als Datendatei eingeschlossen haben.

Hinweis

Die ApplicationDeployment Klasse und APIs im System.Deployment.Application Namespace werden in .NET Core und .NET 5 und höher nicht unterstützt. In .NET 7 wird eine neue Methode für den Zugriff auf Anwendungsbereitstellungseigenschaften unterstützt. Weitere Informationen finden Sie unter Access 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 zum Markieren von Dateien in Ihrer Bereitstellung als Datendateien finden Sie unter How to: Include a Data File in a ClickOnce Application.

Sie können den Pfad des Datenverzeichnisses auch mithilfe der relevanten Variablen in der Application Klasse abrufen, z. B. LocalUserAppDataPath.

Das Bearbeiten anderer Dateitypen erfordert möglicherweise zusätzliche Berechtigungen. Wenn Sie z. B. eine Access-Datenbankdatei (.mdb) verwenden möchten, muss Ihre Anwendung die volle Vertrauensstellung bestätigen, um die relevanten <xref:System.Data-Klassen> zu verwenden.

Anwendungsversionen und Datenverzeichnis

Jede Version einer Anwendung verfügt über ein eigenes Datenverzeichnis, das von anderen Versionen isoliert ist. ClickOnce erstellt dieses Verzeichnis unabhängig davon, ob datendateien in der Bereitstellung enthalten sind, sodass die Anwendung zur Laufzeit über einen Speicherort zum Erstellen neuer Datendateien verfügt. Wenn eine neue Version einer Anwendung installiert wird, kopiert ClickOnce alle vorhandenen Datendateien aus dem Datenverzeichnis der vorherigen Version in das Datenverzeichnis 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 einen anderen Hashwert in der alten Version der Anwendung wie in der neuen Version aufweist. Wenn die frühere Version der Anwendung eine neue Datei erstellt hat, die denselben Namen wie eine Datei enthält, 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 im Datenverzeichnis mit dem Namen .preeingeschlossen, sodass die Anwendung weiterhin auf die alten Daten für Migrationszwecke zugreifen kann.

Wenn Sie eine differenzierte Migration von Daten benötigen, können Sie die ClickOnce-Bereitstellungs-API verwenden, um eine benutzerdefinierte Migration vom alten Datenverzeichnis zum neuen Datenverzeichnis durchzuführen. Sie müssen einen verfügbaren Download testen, indem Sie die Verwendung von IsFirstRun prüfen, und das Update mithilfe von Update oder UpdateAsync herunterladen. Danach müssen Sie alle benutzerdefinierten Datenmigrationen selbst durchführen, nachdem das Update abgeschlossen ist.

Isolierter Speicher

Der isolierte Speicher stellt eine API zum Erstellen und Zugreifen auf Dateien mithilfe einer einfachen API bereit. Der tatsächliche Speicherort der gespeicherten Dateien wird sowohl vom Entwickler als auch vom Benutzer ausgeblendet.

Der isolierte Speicher funktioniert in allen Versionen von .NET Framework. Der isolierte Speicher funktioniert auch in teilweise vertrauenswürdigen Anwendungen, ohne dass zusätzliche Berechtigungserteilungen erforderlich sind. Sie sollten isolierten Speicher verwenden, wenn Ihre Anwendung teilweise als vertrauenswürdig ausgeführt werden muss, aber anwendungsspezifische Daten verwalten muss.

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 finden Sie unter "Isolierter Speicher".

Andere lokale Dateien

Wenn Ihre Anwendung mit Endbenutzerdaten wie Berichten, Bildern, Musik usw. arbeiten muss, muss FileIOPermission Ihre Anwendung Daten im lokalen Dateisystem lesen und schreiben.

Daten aus der Ferne

Irgendwann muss Ihre Anwendung wahrscheinlich Informationen von einer Remotewebsite abrufen, z. B. Kundendaten oder Marktinformationen. In diesem Abschnitt werden die am häufigsten verwendeten Techniken zum Abrufen von Remotedaten erläutert.

Zugreifen auf Dateien mit HTTP

Sie können auf Daten von einem Webserver zugreifen, indem Sie entweder die WebClient Klasse oder die HttpWebRequest Klasse im System.Net Namespace verwenden. Die Daten können statische Dateien oder ASP.NET Anwendungen sein, die Rohtext- oder XML-Daten zurückgeben. Wenn ihre Daten im XML-Format vorliegen, wird die schnellste Methode zum Abrufen der Daten mithilfe der XmlDocument Klasse verwendet, deren Load Methode eine URL als Argument verwendet. Ein Beispiel finden Sie unter Lesen eines XML-Dokuments in das DOM.

Sie müssen die Sicherheit berücksichtigen, wenn Ihre Anwendung über HTTP auf Remotedaten zugreift. Standardmäßig ist der Zugriff Ihrer ClickOnce-Anwendung auf Netzwerkressourcen abhängig davon, wie Ihre Anwendung bereitgestellt wurde, eingeschränkt. Diese Einschränkungen werden angewendet, um zu verhindern, dass böswillige Programme Zugriff auf privilegierte Remotedaten erhalten oder den Computer eines Benutzers verwenden, um andere Computer im Netzwerk anzugreifen.

In der folgenden Tabelle sind die Bereitstellungsstrategien aufgeführt, die Sie verwenden können, und deren Standardwebberechtigungen.

Bereitstellungstyp Standardnetzwerkberechtigungen
Webinstallation Kann nur auf den Webserver zugreifen, von dem die Anwendung installiert wurde
Dateifreigabe installieren Auf Webserver kann nicht zugegriffen werden.
CD-ROM Installieren Kann auf beliebige Webserver zugreifen

Wenn Ihre ClickOnce-Anwendung aufgrund von Sicherheitseinschränkungen nicht auf einen Webserver zugreifen kann, muss die Anwendung WebPermission für diesen Webserver beanspruchen. Weitere Informationen zum Erhöhen von Sicherheitsberechtigungen für eine ClickOnce-Anwendung finden Sie unter Secure ClickOnce-Anwendungen.

Zugreifen auf Daten über einen XML-Webdienst

Wenn Sie Ihre 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-Webdiensts ( z. B. Abrufen von Kunden, Bestellungen usw.) werden als Methoden für den Proxy verfügbar gemacht. Dadurch ist die Verwendung von Webdiensten wesentlich einfacher als Rohtext- oder XML-Dateien.

Wenn Ihr XML-Webdienst über HTTP arbeitet, wird der Dienst an dieselben Sicherheitseinschränkungen wie die klassen WebClientHttpWebRequest gebunden.

Direkt auf eine Datenbank zugreifen

Sie können die Klassen im System.Data Namespace verwenden, um direkte Verbindungen mit einem Datenbankserver wie SQL Server in Ihrem Netzwerk herzustellen, aber Sie müssen die Sicherheitsprobleme berücksichtigen. Im Gegensatz zu HTTP-Anforderungen sind Datenbankverbindungsanforderungen standardmäßig unter teilweiser Vertrauensstellung verboten; Sie verfügen standardmäßig nur über eine solche Berechtigung, wenn Sie Ihre ClickOnce-Anwendung über eine CD-ROM installieren. Dadurch wird Ihre Anwendung voll vertrauenswürdig. Um den Zugriff auf eine bestimmte SQL Server-Datenbank zu ermöglichen, muss Ihre Anwendung SqlClientPermission anfordern; um den Zugriff auf eine andere Datenbank als SQL Server zu ermöglichen, muss OleDbPermission angefordert werden.

Meistens müssen Sie nicht direkt auf die Datenbank zugreifen, sondern stattdessen über eine Webserveranwendung, die in ASP.NET oder einem XML-Webdienst geschrieben wurde, darauf zugreifen. Der Zugriff auf die Datenbank auf diese Weise ist häufig die beste Methode, wenn Ihre ClickOnce-Anwendung von einem Webserver bereitgestellt wird. Sie können auf den Server in teilweiser Vertrauensstellung zugreifen, ohne die Berechtigungen Ihrer Anwendung zu erhöhen.