Erro 1053 o serviço não respondeu à solicitação de início ou controle

Eu escrevi um serviço do Windows em C # que basicamente verifica meu banco de dados a cada minuto para pedidos, gera um PDF a partir desses pedidos e envia um e-mail para ele.

A lógica funciona perfeitamente nos meus testes etc.

Quando eu crio o serviço e o instalo usando o projeto de instalação, quando vou iniciar o serviço nos serviços mmc, fico:

erro 1053 o serviço não respondeu à solicitação de início ou controle em tempo hábil

Meu método OnStart se parece com isso:

protected override void OnStart(string[] args)
{
    //writeToWindowsEventLog("Service started", EventLogEntryType.Information);
    timer.Enabled = true;
}

Basicamente, apenas ativa o temporizador ... então não há chamada de processo intensivo lá.

Onde eu estou errando?

Eu tentei configurar a conta de inicialização para o sistema local, serviço de rede etc ... nada funciona!

Editar:

Aqui está o meu código: (processPurchaseOrders é o método onde o banco de dados é consultado e os PDFs são gerados, etc ...)

public partial class PurchaseOrderDispatcher : ServiceBase
{
    //this is the main timer of the service
    private System.Timers.Timer timer;

    public PurchaseOrderDispatcher()
    {
        InitializeComponent();
    }

    // The main entry point for the process
    static void Main()
    {
      #if (!DEBUG)
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[] { new PurchaseOrderDispatcher() };
        ServiceBase.Run(ServicesToRun);
      #else //debug code
        PurchaseOrderDispatcher service = new PurchaseOrderDispatcher();
        service.processPurchaseOrders();
      #endif
    }

    private void InitializeComponent()
    {
        this.CanPauseAndContinue = true;
        this.ServiceName = "Crocus_PurchaseOrderGenerator";
    }

    private void InitTimer()
    {
        timer = new System.Timers.Timer();

        //wire up the timer event
        timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);

        //set timer interval
        var timeInSeconds = Convert.ToInt32(ConfigurationManager.AppSettings["TimerIntervalInSeconds"]);
        timer.Interval = (timeInSeconds * 1000); // timer.Interval is in milliseconds, so times above by 1000

        timer.Enabled = true;
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
            components.Dispose();

        base.Dispose(disposing);
    }

    protected override void OnStart(string[] args)
    {
        //instantiate timer
        Thread t = new Thread(new ThreadStart(this.InitTimer));
        t.Start();
    }

    protected override void OnStop()
    {
        //turn off the timer.
        timer.Enabled = false;
    }

    protected override void OnPause()
    {
        timer.Enabled = false;

        base.OnPause();
    }

    protected override void OnContinue()
    {
        timer.Enabled = true;

        base.OnContinue();
    }

    protected void timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        processPurchaseOrders();
    }
}

questionAnswers(12)

yourAnswerToTheQuestion