Partager via


Accéder aux données locales et distantes dans les applications ClickOnce

La plupart des applications consomment ou produisent des données. ClickOnce vous offre diverses options de lecture et d’écriture de données, à la fois localement et à distance.

Données locales

Avec ClickOnce, vous pouvez charger et stocker des données localement à l’aide de l’une des méthodes suivantes :

  • Répertoire de données ClickOnce

  • Stockage isolé

  • Autres fichiers locaux

Répertoire de données ClickOnce

Chaque application ClickOnce installée sur un ordinateur local possède un répertoire de données, stocké dans le dossier Documents et Paramètres de l’utilisateur. Tout fichier inclus dans une application ClickOnce et marqué comme un fichier « données » est copié dans ce répertoire lorsqu’une application est installée. Les fichiers de données peuvent être de n’importe quel type de fichier, le plus fréquemment utilisé étant du texte, du XML et des fichiers de base de données tels que Microsoft Access .mdb fichiers.

Le répertoire de données est destiné aux données gérées par l’application, qui sont des données que l’application stocke et gère explicitement. Tous les fichiers statiques et non liés à l’accès non marqués comme « données » dans le manifeste de l’application résideront à la place dans le répertoire d’application. Ce répertoire est l’emplacement où résident les fichiers et assemblys exécutables de l’application (.exe).

Remarque

Lorsqu’une application ClickOnce est désinstallée, son répertoire de données est également supprimé. N’utilisez jamais le répertoire de données pour stocker des données gérées par l’utilisateur final, telles que des documents.

Marquer des fichiers de données dans une distribution ClickOnce

Pour placer un fichier existant dans le répertoire de données, vous devez marquer le fichier existant en tant que fichier de données dans le fichier manifeste de l’application ClickOnce. Pour plus d’informations, consultez Guide pratique pour inclure un fichier de données dans une application ClickOnce.

Lire et écrire dans le répertoire de données

La lecture à partir du répertoire de données nécessite que votre application ClickOnce dispose de l'autorisation de lecture ; de même, l'écriture dans le répertoire nécessite une autorisation d'écriture. Votre application dispose automatiquement de cette autorisation s’il est configuré pour s’exécuter avec confiance totale. Pour plus d’informations sur l’élévation des autorisations pour votre application à l’aide de l’élévation d’autorisations ou du déploiement d’applications approuvées, consultez les applications ClickOnce sécurisées.

Remarque

Si votre organisation n’utilise pas le déploiement d’applications approuvées et a désactivé l’élévation des autorisations, l’assertion des autorisations échoue.

Une fois que votre application dispose de ces autorisations, elle peut accéder au répertoire de données à l’aide d’appels de méthode sur des classes dans le System.IO. Vous pouvez obtenir le chemin d'accès du répertoire de données dans une application Windows Forms ClickOnce en utilisant la propriété DataDirectory définie sur la propriété CurrentDeployment de ApplicationDeployment. Il s’agit du moyen le plus pratique et recommandé d’accéder à vos données. L’exemple de code suivant montre comment procéder pour un fichier texte nommé CSV.txt que vous avez inclus dans votre déploiement en tant que fichier de données.

Remarque

La ApplicationDeployment classe et les API dans l'espace de noms System.Deployment.Application ne sont pas prises en charge dans .NET Core et .NET 5 et versions ultérieures. Dans .NET 7, une nouvelle méthode d’accès aux propriétés de déploiement d’application est prise en charge. Pour plus d’informations, consultez les propriétés de déploiement Access ClickOnce dans .NET. .NET 7 ne prend pas en charge l’équivalent des méthodes ApplicationDeployment.

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);
    }
}

Pour plus d’informations sur le marquage des fichiers dans votre déploiement en tant que fichiers de données, consultez Guide pratique pour inclure un fichier de données dans une application ClickOnce.

Vous pouvez également obtenir le chemin d’accès au répertoire de données à l’aide des variables pertinentes sur la Application classe, telles que LocalUserAppDataPath.

La manipulation d’autres types de fichiers peut nécessiter des autorisations supplémentaires. Par exemple, si vous souhaitez utiliser un fichier de base de données Access (.mdb), votre application doit affirmer une confiance totale afin d’utiliser les classes xref :System.Data< pertinentes>.

Répertoire de données et versions d’application

Chaque version d’une application possède son propre répertoire de données, isolé des autres versions. ClickOnce crée ce répertoire indépendamment de l'inclusion de fichiers de données dans le déploiement, afin que l’application dispose d’un emplacement pour créer de nouveaux fichiers de données pendant l'exécution. Lorsqu’une nouvelle version d’une application est installée, ClickOnce copie tous les fichiers de données existants du répertoire de données de la version précédente dans le répertoire de données de la nouvelle version, qu’ils soient inclus dans le déploiement d’origine ou créés par l’application.

ClickOnce remplace l’ancienne version du fichier par la version la plus récente du serveur si un fichier de données a une valeur de hachage différente dans l’ancienne version de l’application comme dans la nouvelle version. En outre, si la version antérieure de l’application a créé un fichier portant le même nom qu’un fichier inclus dans le déploiement de la nouvelle version, ClickOnce remplace le fichier de l’ancienne version par le nouveau fichier. Dans les deux cas, les anciens fichiers seront inclus dans un sous-répertoire dans le répertoire de données nommé .pre, afin que l’application puisse toujours accéder aux anciennes données à des fins de migration.

Si vous avez besoin d’une migration plus fine des données, vous pouvez utiliser l’API De déploiement ClickOnce pour effectuer une migration personnalisée de l’ancien répertoire de données vers le nouveau répertoire de données. Vous devrez tester un téléchargement disponible à l’aide de IsFirstRun, télécharger la mise à jour à l’aide de Update ou UpdateAsync, et effectuer tout travail de migration de données personnalisé vous-même une fois la mise à jour terminée.

Stockage isolé

Le stockage isolé fournit une API permettant de créer et d’accéder aux fichiers à l’aide d’une API simple. L’emplacement réel des fichiers stockés est masqué à la fois du développeur et de l’utilisateur.

Le stockage isolé fonctionne dans toutes les versions du .NET Framework. Le stockage isolé fonctionne également dans des applications partiellement approuvées sans avoir besoin d’octrois d’autorisations supplémentaires. Vous devez utiliser le stockage isolé si votre application doit s’exécuter en confiance partielle, mais doit conserver des données spécifiques à l’application.

Remarque

Dans ClickOnce pour .NET Core et .NET 5 ou version ultérieure, l’approbation partielle, qui nécessite la sécurité d’accès au code, n’est pas prise en charge. Dans .NET Framework, l’utilisation de la sécurité d’accès au code n’est pas une bonne pratique et n’est pas recommandée.

Pour plus d’informations, consultez Stockage isolé.

Autres fichiers locaux

Si votre application doit utiliser ou enregistrer des données utilisateur final telles que des rapports, des images, de la musique, etc., votre application doit FileIOPermission lire et écrire des données dans le système de fichiers local.

Données distantes

À un moment donné, votre application devra probablement récupérer des informations à partir d’un site Web distant, comme les données client ou les informations sur le marché. Cette section décrit les techniques les plus courantes pour récupérer des données distantes.

Accéder aux fichiers avec HTTP

Vous pouvez accéder aux données à partir d’un serveur web en utilisant soit la classe WebClient soit la classe HttpWebRequest dans l'espace de noms System.Net. Les données peuvent être des fichiers statiques ou des applications ASP.NET qui retournent du texte brut ou des données XML. Si vos données sont au format XML, le moyen le plus rapide de récupérer les données consiste à utiliser la classe, dont XmlDocument la Load méthode prend une URL en tant qu’argument. Pour obtenir un exemple, consultez Lire un document XML dans le DOM.

Vous devez prendre en compte la sécurité lorsque votre application accède aux données distantes via HTTP. Par défaut, l’accès de votre application ClickOnce aux ressources réseau peut être restreint, selon la façon dont votre application a été déployée. Ces restrictions sont appliquées pour empêcher les programmes malveillants d’accéder aux données distantes privilégiées ou d’utiliser l’ordinateur d’un utilisateur pour attaquer d’autres ordinateurs sur le réseau.

Le tableau suivant répertorie les stratégies de déploiement que vous pouvez utiliser et leurs autorisations web par défaut.

Type de déploiement Autorisations réseau par défaut
Installation web Peut uniquement accéder au serveur web à partir duquel l’application a été installée
Installation du partage de fichiers Impossible d’accéder à des serveurs web
installation de CD-ROM Peut accéder à n’importe quel serveur web

Si votre application ClickOnce ne peut pas accéder à un serveur Web en raison de restrictions de sécurité, l’application doit déclarer WebPermission pour ce site web. Pour plus d’informations sur l’augmentation des autorisations de sécurité pour une application ClickOnce, consultez applications ClickOnce sécurisées.

Accéder aux données via un service web XML

Si vous exposez vos données en tant que service web XML, vous pouvez accéder aux données à l’aide d’un proxy de service Web XML. Le proxy est une classe .NET Framework que vous créez à l’aide de Visual Studio. Les opérations du service Web XML, telles que la récupération des clients, le passage de commandes, etc., sont exposées en tant que méthodes sur le proxy. Cela rend les services Web beaucoup plus faciles à utiliser que les fichiers texte brut ou XML.

Si votre service Web XML opère sur HTTP, le service sera soumis aux mêmes restrictions de sécurité que les classes WebClient et HttpWebRequest.

Accéder directement à une base de données

Vous pouvez utiliser les classes au sein de l’espace System.Data de noms pour établir des connexions directes avec un serveur de base de données tel que SQL Server sur votre réseau, mais vous devez prendre en compte les problèmes de sécurité. Contrairement aux requêtes HTTP, les demandes de connexion de base de données sont toujours interdites par défaut en vertu d’une approbation partielle ; Vous n’aurez cette autorisation par défaut que si vous installez votre application ClickOnce à partir d’un CD-ROM. Cela donne à votre application une confiance totale. Pour activer l’accès à une base de données SQL Server spécifique, votre application doit lui demander SqlClientPermission ; pour permettre l’accès à une base de données autre que SQL Server, il doit demander OleDbPermission.

La plupart du temps, vous n’aurez pas à accéder directement à la base de données, mais vous y accéderez plutôt par le biais d’une application serveur Web écrite dans ASP.NET ou un service web XML. L’accès à la base de données de cette façon est fréquemment la meilleure méthode si votre application ClickOnce est déployée à partir d’un serveur web. Vous pouvez accéder au serveur en confiance partielle sans élever les autorisations de votre application.