Emplacement recommandé pour le stockage d’état du service Windows?

J’ai un service Windows écrit en C # (.Net 3.5) et j’ai besoin de stocker un état quelque part afin que la prochaine fois que le service démarre, il sache où il s’est arrêté.

Quel est le magasin recommandé pour ce type de chose? Le registre? Que se passe-t-il si je mets juste quelques parameters utilisateur dans un fichier Settings.settings? Où se trouverait le profil d’utilisateur pour un service s’exécutant en tant que LocalSystem ou NetworkService?

Personnellement, je préfère le registre pour le stockage de l’état du serveur, à condition qu’il ne s’agisse pas d’une grande quantité d’informations.

Si vous stockez une grande quantité d’informations, une firebase database locale est une autre option. Les services présentent l’avantage de fonctionner sous des privilèges élevés, vous pouvez donc également utiliser un stockage de fichiers local.

Je voudrais aller avec un fichier .settings, car ses propriétés sont de type sécurisé. Cela suppose bien sûr que le service ne stocke pas une grande quantité d’informations. Est-il vraiment important de savoir où le système choisit de stocker le fichier de parameters?

Je déteste dire cela, mais la meilleure réponse est que cela dépend . Sans connaître l’object de votre service, une réponse correcte ne peut être donnée. Cela dit, le monde est votre huître, pour ainsi dire.

Si c’est un petit bloc de données assez simple, vous pouvez créer une classe sérialisable XML et l’écrire très facilement sur le disque à l’arrêt et la relire au démarrage. Pour une classe assez simple, vous pouvez simplement append l’atsortingbut [Serializable] et le XmlSerializer saura automatiquement comment le sérialiser / désérialiser.

Si vous avez suffisamment de données pour qu’une firebase database SQL soit plus adaptée, consultez SQL Server Compact Edition ou la liaison System.Data.SQLite pour SQLite .

Les deux vous permettront de créer une firebase database en un seul fichier, sans avoir à installer de services Windows supplémentaires ni à configurer quoi que ce soit. System.Data.SQLite n’a même pas besoin d’être installé – il est entièrement contenu avec le fichier .dll que votre projet référence.

Dans les deux cas, le meilleur emplacement pour le fichier est probablement SpecialFolder.CommonApplicationData – je pense que cela finit par être C: \ ProgramData \ sur Vista, mais évite d’avoir à coder en dur le chemin exact.