Вам нужно запустить поток переднего плана , чтобы не допустить выхода из процесса.
Это достигается только созданием новой темы. A Timer
работает как фоновая тема. См. Обновление ниже!
Смотрите мой ответ здесь:
Это ОЧЕНЬ ПРОСТОЙ подход:
public partial class EmailService : ServiceBase
{
Thread _thread = new Thread(DoAlways)
protected override void OnStart(string[] args)
{
_thread.Start();
}
private void DoAlways()
{
while()
{
// ...
}
}
UPDATE
Timer
типа System.Timers.Timer
использует System.Threading.Timer
, который, в свою очередь, использует собственный таймер WIN32.
Я скомпилировал и установил ваш сервис на моей машине (XP), и он просто работал. Служба запущена без проблем. Я предлагаю вам жестко кодировать значение interval , чтобы посмотреть, работает ли оно, так как я подозреваю, что оно получает значение ноль, поэтому таймер никогда не инициализируется.