C#自定义服务无法在2008 Server上启动

时间:2013-03-30 10:39:15

标签: c# debugging service windows-server-2008

我已经建立了一个小服务(c#,net 4)。经过几次测试和开发环境调优后,我在自己的电脑上尝试过。一切正常。

当我在Windows 2008 R2服务器(生产环境)上安装服务时,它不会开始给我1053错误(服务无法及时启动)

很奇怪,当我开始服务时,我突然得到这个错误,就在一两秒之后。 我已将选项this.RequireMoreTime(120000)添加到我的服务中,并且我编辑了ServicePipelineMode的注册表项。

更多信息:

  • 我正在使用Log4net在应用程序日志中记录事件。
  • 我使用自定义源(使用powershell命令创建)
  • 该服务设置为在网络服务帐户下运行,使用管理帐户启动它可获得相同的结果
  • 我使用log.error(exception.tostring())将每个部分放在Try-catch下,但事件日志中没有记录任何内容。
  • 我在网上看过很多帖子但是没有什么可以帮我解决。
  • Dev和server具有相同的框架:

          

任何帮助都将不胜感激。

非常感谢提前。

修改
我试图在program.cs上添加一个try-catch,这是我项目的起点:

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    static void Main()
    {
        try
        {
            if (!EventLog.SourceExists("CheckMail"))
            {
                EventLog.CreateEventSource("CheckMail", "Application");
                EventLog.WriteEntry("EventSystem", "EventSource created");
            }

            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] { new CheckMailSvc() };
            ServiceBase.Run(ServicesToRun);
        }
        catch (Exception ex)
        { 
          string message = string.Format("Error starting Service {0}", ex.ToString());
          EventLog.WriteEntry("CheckMail", message, EventLogEntryType.Warning, 666);
        }
    }
}

没有任何东西被捕获(无论是EventSource创建事件还是异常)

所有其他代码都在try-catch中,使用log4net记录事件(在开发环境中它可以正常工作)。

1 个答案:

答案 0 :(得分:0)

感谢您的建议。 我的OnStart是这样的:

    protected override void OnStart(string[] args)
    {
        try
        {
            this.RequestAdditionalTime(30000);
            ServiceStart = DateTime.Now;
            XmlConfigurator.Configure();
            log4net.ThreadContext.Properties["EventID"] = 666;
            log.Info("Service Started");
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("Service Configuration:");
            log.Info(sb.ToString());
            Timer t = new Timer(new TimerCallback(SendMail));
            t.Change(TimeSpan.Zero, TimeSpan.FromMinutes(every));
        }
        catch (Exception ex)
        {
            log.ErrorFormat("Error starting service: {0}", ex.ToString());
        }
    }

你可以看到没有什么奇怪的事情发生,我应该在应用程序日志中看到一条启动消息。