【问题标题】:What is the best way of storing last run date-time/ execution date-time for windows service?为 Windows 服务存储上次运行日期时间/执行日期时间的最佳方式是什么?
【发布时间】:2016-01-24 02:24:01
【问题描述】:

我有一个每 1 小时运行一次的 Windows 服务。我想存储上次运行的日期时间,以便每次服务运行时都可以检查值(上次运行的日期时间)。 该值用作服务获取数据的存储过程的参数之一。

现在,我的问题是存储上次运行日期值的最佳/理想方式是什么?

我能想到3种方式:

  1. 将其存储在数据库表中。
  2. 将其存储在应用程序文件夹中的文本或XML文件中(这里的问题是:创建文本是否好? 应用程序文件夹中的文件并每小时更新一次?)。
  3. 在配置文件中创建一个部分,并在每次执行服务时更新它。

请高手指教。

【问题讨论】:

    标签: datetime windows-services


    【解决方案1】:

    如果您有一个服务需要检查它执行的最后一次运行完成的时间,我会将其存储为用户设置项。如果您认为也许您将有许多服务共享此任务,将其置于共享位置(如数据库)会有所帮助 - 尽管如果您将数据从用户设置迁移到数据库应该很容易需要使用多个服务。

    我会避免使用自定义 XML 或数据文件,因为 .NET 和 Visual Studio 中已经支持用户(运行时)设置。

    更新:

    如果您想使用用户设置,您只需双击解决方案资源管理器中的设置(在项目的属性下)或在项目的属性中选择设置选项卡。添加一个具有用户范围的值(可能是System.DateTime 类型。如果您将其命名为LastExecuted,您将使用如下代码来更新该值:

    Properties.Settings.Default.LastExecuted = DateTime.Now;
    Properties.Settings.Default.Save();
    

    【讨论】:

    • 当您说“用户设置项”时,是指 App.config 文件吗?你能发布示例代码吗?
    • 很好的解决方案@Peter,但还有一个问题。它实际上将值存储在哪里?如果这个服务部署在不是我维护的保护服务器上会不会有问题?
    • 通常 user.config 位于 appdata 文件夹中。例如C:\Users\MyName\AppData\Local\AppName\AppName\1.0.0.0 如果在 Windows 中启用了漫游,这将是 C:\Users\MyName\AppData\Roaming\ApplicationName\ApplicationName\1.0.0.0
    • 好吧,我仍然担心丢失这个文件。我想我会走数据库的路。
    猜你喜欢
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 2011-04-16
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2011-06-02
    相关资源
    最近更新 更多