【问题标题】:Recommended place for Windows Service state storage?Windows 服务状态存储的推荐位置?
【发布时间】:2010-01-09 01:49:15
【问题描述】:

我有一个用 C# (.Net 3.5) 编写的 Windows 服务,我需要在某处存储一些状态,以便下次服务启动时,它知道它停止的位置。

这类东西的推荐商店是什么?注册表?如果我只是将一些用户设置放在 Settings.settings 文件中怎么办?作为 LocalSystem 或 NetworkService 执行的服务的用户配置文件在哪里?

【问题讨论】:

    标签: c# .net windows windows-services windows-vista


    【解决方案1】:

    就我个人而言,我更喜欢使用注册表来存储服务器状态,前提是它的信息量不是很大。

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

    【讨论】:

    • 如果我想使用注册表并尝试使用HKEY_LOCAL_MACHINE,Vista/Win7会报错吗?
    • 它应该可以通过服务运行,因为您(很可能)有权读取和写入 HKLM。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我不想这么说,但最好的答案是视情况而定。如果不知道您的服务目的,就无法给出正确的答案。话虽如此......世界就是你的牡蛎,可以这么说。

      【讨论】:

        【解决方案4】:

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

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

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

        在任何一种情况下,文件的最佳位置可能是 SpecialFolder.CommonApplicationData - 我认为这最终是 Vista 上的 C:\ProgramData\,但避免了对确切路径进行硬编码。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-12
          • 2017-11-19
          • 2017-09-20
          • 1970-01-01
          • 2016-04-11
          相关资源
          最近更新 更多