Windows服务错误1053

时间:2011-03-18 18:35:25

标签: c# windows-services

我正在编写一个连接到crm系统的Windows服务来下载一个计划,然后运行各种数据馈送等。我已经完成了所有工作,除非我安装所有内容并尝试运行启动服务我得到了以下错误:

“错误1053:服务未响应a中的启动或控制请求 及时时尚“

这是我在Service1.cs中使用的代码;

namespace FeedManagementService
{
  public partial class Service1 : ServiceBase
  {
    private System.Timers.Timer timer;

public Service1()
{
  InitializeComponent();
}

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

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

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

  // Add the timer event
  timer.Elapsed += new ElapsedEventHandler(timerTick);

  // Set the interval
  double timeInSeconds = 6.0;
  timer.Interval = (timeInSeconds * 1000);
  timer.Enabled = true;
} // InitTimer()

private void timerTick(object sender, EventArgs e)
{
  // CRM connection stuffhere
} // timerTick
  }
}

然后在Service1.Designer.cs中的以下内容

namespace FeedManagementService
{
  partial class Service1
  {
    /// <summary> 
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
      if (disposing && (components != null))
      {
        components.Dispose();
      }
      base.Dispose(disposing);
    }

    #region Component Designer generated code

    /// <summary> 
    /// Required method for Designer support - do not modify 
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
      this.components = new System.ComponentModel.Container();
      this.ServiceName = "Feed Management Service";
      this.CanPauseAndContinue = true;
    } // InitializeComponent()

    #endregion
  }
}

最后是ProjectInstaller.cs中的以下内容

namespace FeedManagementService
{
  [RunInstaller(true)]
  public partial class ProjectInstaller : System.Configuration.Install.Installer
  {
    public ProjectInstaller()
    {
      ServiceProcessInstaller process = new ServiceProcessInstaller();

      process.Account = ServiceAccount.LocalSystem;

      ServiceInstaller serviceAdmin = new ServiceInstaller();

      serviceAdmin.StartType = ServiceStartMode.Manual;
      serviceAdmin.ServiceName = "Service1";
      serviceAdmin.DisplayName = "Feed Management Service";
      Installers.Add(process);
      Installers.Add(serviceAdmin);
    }
  }
}

3 个答案:

答案 0 :(得分:4)

经过大量调查并解决了一大堆与问题无关的“问题”,我发现在服务的Main()方法中我需要以下内容;

ServiceBase[] ServicesToRun;
  ServicesToRun = new ServiceBase[] 
        { 
            new Service1() 
        };
  ServiceBase.Run(ServicesToRun);

由于添加了这一切,现在所有内容似乎都运行良好,服务按预期启动。

答案 1 :(得分:1)

似乎你OnStart()方法在允许的超时内没有返回。消息是一次出现,还是需要30秒才能显示?您的CRM连接资料(tm)需要一段时间才能运行吗?

远景:您在应用中使用任何Windows.Forms内容吗?这些不应该用在服务上,并且可以以奇怪和神秘的方式进行交互。

答案 2 :(得分:0)

我遇到了同样的问题,并且根本不确定如何解决它。是的,这是因为服务中引发了异常,但您可以遵循一些通用准则来纠正此问题:

  • 检查您是否已编写正确的代码以启动该服务:

    ServiceBase [] ServicesToRun; ServicesToRun = new ServiceBase [] {     新的WinsowsServiceToRun() }; ServiceBase.Run(ServicesToRun);

  • 您需要确保在WinsowsServiceToRun类中运行某种无限循环

  • 最后,可能有一些代码没有记录任何内容并突然关闭程序(我就是这种情况),在这种情况下,你将不得不按照旧的调试学校来编写一个行到源(text / db / wherever)。我所面临的是,由于运行服务的帐户不是&#34; Admin&#34;,代码只是掉下来并且没有记录任何异常,以防它试图写入&#34; Windows事件日志&#34; ;即使代码是在那里记录异常。记录到偶数日志实际上不需要管理员权限,但需要定义源。如果事件的源尚未在系统中定义,并且服务尝试在没有管理员权限的情况下首次记录它,则它将失败。要解决此问题,请按照以下步骤进行:

  1. 使用管理员权限打开命令提示符
  2. 粘贴命令:eventcreate / ID 1 / L APPLICATION / T INFORMATION / SO&lt;&gt; / D&#34;&lt;&gt;&#34;
  3. 按enter
  4. 现在启动服务