Windows服务基于机器以两种不同的方式运行

时间:2012-04-10 05:29:08

标签: c#

我写了一个Windows服务,这将是我的类库每隔15分钟执行一次。

当我在我的机器中部署Windows服务时它工作正常,计时器运行良好,每15分钟它调用我的类库但是当我部署在我的服务器中时,它只在onstart上工作正常后它不会提升计时器或者每15分钟假设打电话给我的班级lib没有发生,有人请指导我看看这里找出问题

这是我的代码

    public partial class Service1 : ServiceBase
{
    private Timer _timer;
    private DateTime _lastRun = DateTime.Now;

    public Service1()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        log4net.Config.XmlConfigurator.Configure();

        _timer = new Timer(10 * 60 * 1000); // every 10 minutes
        _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
        Shell Distribute= new Shell();
        Distribute.Distribute();
_timer.start();//this line was missed in my original code
    }

    protected override void OnStop()
    {
        this.ExitCode = 0;
        base.OnStop();

    }
    private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
       //if (_lastRun.Date < DateTime.Now.Date)
        //{

try
{
_timer.Stop();
Shell Distribute= new Shell();
Distribute.Distribute();
}
catch(exception ex)
{}
finally
{

            _timer.Start();
}
         //}
        }

    }
}

我坚信登录问题,但我不确定有两个原因,如果我在我的测试服务器中使用相同的帐户启动或重新启动此服务效果很好,但只有计时器不起作用。 代码是完全相同的所以我不担心我的代码bcoz它工作计时器基于我的本地机器使用相同的帐户。 在此先感谢。

1 个答案:

答案 0 :(得分:0)

我不知道为什么我的服务现在基于计时器工作,我所做的只是在下面的代码中添加日志以找出正在发生的事情但幸运的是它就像一个魅力。

 protected override void OnStart(string[] args)
    {

        log4net.Config.XmlConfigurator.Configure();
        log.Debug("Service Called when Onstart");
        _timer = new Timer(10 * 60 * 1000); // every 10 minutes
        log.Debug("calling Distributor Method");
        Shell Distributor = new Shell();
        Distributor.Distribute();

        log.Debug("calling timer Elapsed");
       _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
       log.Debug("start the timer");
       _timer.Start();

    }

    protected override void OnStop()
    {
        log.Debug("stop the timer in OnStop method");
        this.ExitCode = 0;
        base.OnStop();

    }
    private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {

        log.Debug("IN Timer Elapsed method");
        try
        {
            log.Debug("IN try block and calling timer stop function");
            _timer.Stop();
            log.Debug("Distributor Method Called from try block");
            Shell Distributor = new Shell();
            Distributor.Distribute();


        }
        catch (Exception ex)
        {
            log.Debug("IN Catch Block");
            log.Debug(ex.Message); 
        }
        finally
        {
            _lastRun = DateTime.Now;
            log.Debug("IN Final Block");
            log.Debug("start the timer");
            _timer.Start();
            log.Debug("Exit the Timer Elapsed Method");
        }