7
votes

Où sur le système de fichiers doit-il un service Windows persister ses données?

J'écris un service Windows qui doit persister certaines données sur les redémarrages / redémarrages du service. J'écris actuellement les fichiers d'un répertoire renvoyé par application.userappdatapath , mais cela ne semble pas me donner une réponse cohérente. Comment devrais-je déterminer le bon endroit pour écrire les données?


2 commentaires

Chaque service est exécuté avec des privilèges de certains utilisateurs. Les données ne devraient-elles pas être stockées dans ApplicationData de l'utilisateur (je suppose que vous y référez-la comme application.userappdataPath)? Quel est le problème avec cet endroit?


Le service fonctionne comme localysystem. Cependant, le compte LocalSystem n'a pas de répertoire propre dans "Documents et paramètres"; Dans mes tests, il utilise le répertoire localservice, mais nous obtenons des rapports que le service stocke parfois des données au même endroit, puis la recherche d'une autre. Dans le registre, il semble que le chemin Appdata de LocalSystem est% userprofile% \ données d'application, de sorte qu'il semble que% userProfile%% ne nous donne pas une réponse cohérente.


3 Réponses :


4
votes

Si vous voulez que ce soit cohérent (c'est-à-dire l'utilisateur agnostique), essayez applicatif.commonappdatapath .


2 commentaires

Je suis d'accord. Si le service est exécuté en tant que localysystem, il est logique de stocker des données dans le chemin de données indépendant de l'utilisateur.


L'application.comMonAppDataPath est incluse dans System.Windows.Forms.dll. Ai-je vraiment besoin de Winforms de référence du service Windows?



4
votes

Cela dépend si votre service fonctionne avec le compte système ou avec un compte d'utilisateur spécifique.

  • SYSTEM . Stockez les fichiers dans le dossier CommonAppLicationData:

    String Pathforsystem = Environnement.GetFolderDepath (Environnement.Specialfolder.Commez-vousPLICATIONDATA);

  • Compte . Stockez les fichiers dans le dossier ApplicationData:

    tringle pathforuser = Environnement.GetFolderDePath (Environnement.Specialfolder.ApplicationData);


0 commentaires

0
votes

Si ceci est un service .NET, je pense que vous pouvez utiliser isolée


0 commentaires