0

我建立了一个小服务(c#,net 4)。在对开发环境进行了一些测试和调整之后,我在自己的电脑上进行了尝试。一切正常。

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

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

更多信息:

  • 我正在使用 Log4net 在应用程序日志中记录事件。
  • 我使用自定义源(使用 powershell 命令创建)
  • 该服务设置为在网络服务帐户下运行,使用管理帐户启动它会得到相同的结果
  • 我已将每个部分都放在 Try - catch using 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 记录事件(在开发环境中它工作正常)。

4

1 回答 1

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());
        }
    }

如您所见,没有任何奇怪的事情发生,我应该在应用程序日志中看到一条启动消息。

于 2013-03-31T19:05:22.210 回答