1

下面是我在当前窗口服务解决方案中使用的粘贴代码,这将每天上午 10 点定期运行作业,我将使用 App.configuaration 文件传递​​参数

应用程序配置

<add key ="FIREHOST_TIME" value ="10" ></add>
<add key ="SETDAYS" value ="1" ></add>

代码隐藏页面

protected override void OnStart(string[] args)
{

     DateTime tenAM = DateTime.Today.AddHours(FIREHOST_TIME);



      if (DateTime.Now > tenAM)
          tenAM = tenAM.AddDays(SETDAYS);


      // calculate milliseconds until the next 10:00 AM.  
      int timeToFirstExecution = (int)tenAM.Subtract(DateTime.Now).TotalMilliseconds;

      // calculate the number of milliseconds in 24 hours.   
      int timeBetweenCalls = (int)new TimeSpan(24, 0, 0).TotalMilliseconds;

      TimerCallback methodToExecute = kickstart;

      // start the timer.  The timer will execute "ProcessFile" when the number of seconds between now and   
      // the next 10:00 AM elapse.  After that, it will execute every 24 hours.   
      System.Threading.Timer timer = new System.Threading.Timer(methodToExecute, null, timeToFirstExecution, timeBetweenCalls);


}

现在我正在尝试根据以下提到的条件运行我的服务:

我想启动我的服务,但它应该根据我将在 app.config 中新添加的这个新标签来执行工作

BY based on above four tags

if RUN_NOW == 1

    has to perform service based on FIREHOST_TIME and SETDAYS normal thing

else 

    service have to perform the Job doing by after 5 days(because WAIT_DAYS = 5) 
    then it have to use the FIREHOST_TIME and SETDAYS value

注意:服务不应该停止,它应该只处于启动状态

我怎样才能做到这一点?

4

1 回答 1

1

我不确切知道您希望如何实现整个程序逻辑,我可以尝试帮助您的部分是关于在不重新启动服务的情况下对配置文件修改做出反应,这可以通过以下方式完成:

ConfigurationManager.RefreshSection("thesectiontorefresh"); 

为了更好的工作,您可以使用FileSystemWatcher来调用它,以侦听修改 app.config 文件的人,并在调用刷新后做出正确反应,如上所示。您可以通过以下方式获取配置文件路径:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

作为一般信息,请考虑通过使用系统计划任务而不是编写自己的服务来重新设计解决问题的方式。

于 2012-07-25T15:40:12.097 回答