Why is the timer not working in windows service?

16,116

Solution 1

Ok, after several hours, I noticed that the timer works fine. There was nothing wrong with timer. But the problem is about FileStream constructor. FileMode.Append only works by FileAccess.Write.

So fixing this line of code solved the problem .

Anyway, thanks for your attention.

using (FileStream fs = new FileStream(@"d:\mylog.txt", 
                       FileMode.Append, FileAccess.Write))

Solution 2

What is the timer's namespace? It needs to be System.Timers.Timer or System.Threading.Timer.

See here: Best Timer for using in a Windows service

Share:
16,116

Related videos on Youtube

Mojtaba pirveisi
Author by

Mojtaba pirveisi

Updated on June 25, 2022

Comments

  • Mojtaba pirveisi
    Mojtaba pirveisi almost 2 years

    I know this is an already asked question, but I couldn't find any solution. Here is my service.

    class Program : ServiceBase
    {
        private  Timer _timer;
        public Program()
        {
            ServiceName = "PrintTime";
        }
    
        static void Main(string[] args)
        {
            Run(new Program());
        }
    
        protected override void OnStart(string[] args)
        {
            base.OnStart(args);
            _timer = new Timer(5000);
            _timer.Elapsed += _timer_Elapsed;
            _timer.Start();
        }
    
        void _timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            WriteTimeToFile();
        }
    
        protected override void OnStop()
        {
            _timer.Stop();
        }
    
        private void WriteTimeToFile()
        {
            using (FileStream fs = new FileStream(@"d:\mylog.txt", FileMode.Append,            FileAccess.ReadWrite))
            {
                StreamWriter streamWriter = new StreamWriter(fs);
                streamWriter.Write(DateTime.Now.ToShortTimeString());
                streamWriter.Close();
                fs.Close();
            }
        }
    
    }
    

    As you can see I want to write currentTime into my Mylog.txt file every 5 seconds, but nothing happens after even 2 minutes. If I put the WriteTimeToFile() function into OnStart method it works fine, but not in a timer.

    Any help would be greatly appreciated.

    • Adil
      Adil
      Debug your service by attaching the process from visual studio.
  • Mojtaba pirveisi
    Mojtaba pirveisi over 11 years
    If writing to d:\directory is denied , so why putting the WriteTimeToFile() into onStart method works ?