c#自定义服务不能在2008服务器上启动

本文关键字:服务器 启动 2008 自定义 服务 不能 | 更新日期: 2023-09-27 18:06:49

我已经构建了一个小服务(c#,net 4)。在开发环境上进行了一些测试和调整后,我在自己的pc上尝试了它。一切正常

当我在windows 2008 R2服务器(生产环境)上安装服务时,它不会开始给我一个1053错误(服务没有及时启动时间)

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

更多信息:

  • 我正在使用Log4net来记录应用程序日志中的事件。
  • 我使用自定义源(使用powershell命令创建)
  • 服务设置在网络服务帐户下运行,用管理帐户启动它得到相同的结果
  • 我已经把每个部分的Try - catch使用log.error(exception.tostring()),但没有记录在事件日志。
  • 我在网上读了很多帖子,但是没有什么能帮助我修复。
  • 开发和服务器有相同的框架:

如有任何帮助,不胜感激。

提前感谢。

编辑:


我试着在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来记录事件(在开发环境中它工作得很好)。

c#自定义服务不能在2008服务器上启动

谢谢你的建议。我的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());
        }
    }

正如你所看到的,没有什么奇怪的事情发生,我应该在应用程序日志中看到一个开始消息。