Ошибка службы Windows 1053 - PullRequest
2 голосов
/ 18 марта 2011

В настоящее время я пишу службу Windows, которая подключается к системе crm для составления расписания, которое затем запускает различные каналы данных и т. Д. У меня все работает, кроме случаев, когда я все устанавливаю и пытаюсь запустить службу, я получаю следующая ошибка:

"Ошибка 1053: служба не ответила на запрос запуска или управления в своевременная мода "

Вот код, который я использую в моем 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 ]

4 голосов
/ 08 апреля 2011

После долгих исследований и исправления целой кучи «проблем», которые, как оказалось, не имеют ничего общего с проблемой, я обнаружил, что мне нужно следующее в методе Main () службы:

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

В результате добавления всего этого, кажется, теперь все работает отлично, служба запускается, как и ожидалось.

1 голос
/ 18 марта 2011

Похоже, вы OnStart() метод не возвращен в течение допустимого времени ожидания.Появляется ли сообщение сразу или для его отображения требуется около 30 секунд?Ваш CRM Connection Stuff (tm) требует времени для запуска?

Длинный снимок: используете ли вы какие-либо элементы Windows.Forms в своем приложении?Они не должны использоваться в службе и могут взаимодействовать странным и таинственным образом.

0 голосов
/ 29 июля 2015

Я столкнулся с той же проблемой и совершенно не знал, как ее решить. Да, это происходит из-за того, что из службы выдается исключение, но есть несколько общих рекомендаций, которые можно выполнить, чтобы исправить это:

  • Убедитесь, что вы написали правильный код для запуска службы:

    ServiceBase [] ServicesToRun; ServicesToRun = новый ServiceBase [] { новый WinsowsServiceToRun () }; ServiceBase.Run (ServicesToRun);

  • Необходимо убедиться, что в классе WinsowsServiceToRun работает какой-то бесконечный цикл

  • Наконец, может быть какой-то код, который ничего не регистрирует и внезапно закрывает программу (что было со мной), в этом случае вам придется следовать старой школе отладки, которая требовала написания линия к источнику (текст / дБ / где угодно). Я столкнулся с тем, что, поскольку учетная запись, на которой запущена служба, не была «Администратор», код просто падал и не регистрировал никаких исключений в случае, если он пытался записать в «Журнал событий Windows», даже если код был для регистрации исключений , Привилегии администратора на самом деле не нужны для входа в Even Log, но они необходимы для определения источника. В случае, если источник события еще не определен в системе, и служба пытается зарегистрировать его в первый раз без прав администратора, происходит сбой. Чтобы решить эту проблему, выполните следующие действия:

  1. Открыть командную строку с правами администратора
  2. Вставьте команду: eventcreate / ID 1 / L APPLICATION / T INFORMATION / SO <> / D "<>"
  3. Нажмите ввод
  4. Теперь запустите службу
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...