推荐的Windows服务状态存储位置是什么?

4
我有一个用C#(.Net 3.5)编写的Windows服务,需要在某处存储一些状态,以便下次服务启动时,它知道上一次的进度。
这种情况下,建议使用哪种存储方式?注册表?如果我只是将一些用户设置放在Settings.settings文件中呢?对于作为LocalSystem或NetworkService执行的服务,用户配置文件会在哪里?
4个回答

2

个人而言,我更喜欢使用注册表作为服务器状态存储的方式,但前提是不涉及大量信息。

如果需要存储大量信息,则本地数据库是另一种选择。服务有在提升权限下运行的优势,所以通常也可以使用本地文件存储。


如果我想使用注册表,并尝试使用HKEY_LOCAL_MACHINE,Vista/Win7会抱怨吗? - Wayne Bloss
它应该可以从服务中运行,因为您(很可能)具有读写HKLM的权限。 - Reed Copsey

1

如果它是一个小而相对简单的数据块,您可以创建一个可XML序列化的类,并在关闭时将其轻松写入磁盘,在启动时读取它。对于足够简单的类,您只需添加[Serializable]属性,XmlSerializer将自动知道如何进行序列化/反序列化。

如果您有足够的数据,SQL数据库可能更适合,请查看SQL Server Compact EditionSystem.Data.SQLite绑定SQLite

两者都允许您将数据库创建为单个文件,无需安装任何额外的Windows服务或配置任何内容。System.Data.SQLite甚至不需要安装-它完全包含在您的项目引用的.dll中。

在任何情况下,对于该文件来说,最好的位置可能是 SpecialFolder.CommonApplicationData - 我认为在 Vista 上它最终将成为 C:\ProgramData\,但避免了硬编码确切路径的需要。

1
我会选择使用.settings文件,因为它的属性是类型安全的。当然,这是在服务不会存储大量信息的情况下。系统选择存储设置文件的位置真的很重要吗?

0

我真的不想这么说,但是最好的答案是“取决于情况”。如果不知道你的服务目标是什么,无法给出正确的答案。话虽如此...世界就像是你的生蚝。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接