it-swarm.com.de

Windows konnte den Dienst unter Windows Server 2008 R2 SP1 nicht starten (Fehler 1053)

Dieses Problem scheint weithin diskutiert worden zu sein, aber ich habe Probleme, in meinem speziellen Fall die Lösung zu finden. 

Mein Dienst ist so eingerichtet, dass er unter Local System account ausgeführt wird. Auf meinem ersten Computer, auf dem Windows 7 SP1 (64-Bit) installiert ist, funktioniert alles wie erwartet. Aber erst nachdem ich versuche, den Dienst auf meinem zweiten Computer mit Windows Server 2008 R2 SP1 (64-Bit) zu starten, vergeht nicht einmal eine Sekunde, und ich stelle mir diesen nervigen Fehler vor: 

Windows could not start the ProService service on Local Computer
Error 1053: The service did not respond to the start or control request in a timely fashion

Der System Log zeigt 2 Einträge: 

The ProService service failed to start due to the following error: 
The service did not respond to the start or control request in a timely fashion.

und:

A timeout was reached (30000 milliseconds) while waiting for the ProService service to connect.

Die Implementierung sieht folgendermaßen aus:

Program.cs:

static void Main()
{
    AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException;
    ServiceBase.Run(new ServiceBase[] { new ProService() });
}

static void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    if (e != null && e.ExceptionObject != null)
    {
        Logger.Record(e.ExceptionObject);
    }            
}

ProService.cs:

public ProService()
{
    InitializeComponent();
}

protected override void OnStart(string[] args)
{
    try
    {
        RequestAdditionalTime(10000);
        FireStarter.Instance.Execute();
    }
    catch (Exception e)
    {
        Logger.Record(e);
        throw;
    }            
}

Die OnStart-Methode startet gerade einen neuen Thread, sodass die Ausführung fast keine Zeit benötigt. Ich habe die RequestAdditionalTime-Anweisung nur für den Fall verwendet, um diese Angelegenheit als Quelle meines Problems abzulehnen. Wie Sie sehen, handele ich auch alle Ausnahmen, aber während des Startvorgangs wird keine Ausnahme in mein benutzerdefiniertes Ereignisprotokoll geschrieben (btw: Die Protokollierung funktioniert auf dem ersten win7-Computer). Wie kann untersucht werden, was los ist?

12
jwaliszko

Ich habe in wenigen Schritten herausgefunden, was los war:

  1. Ich habe einen Konsolenanwendungs ​​- Wrapper für das geschrieben, was im Grunde in der OnStart - Methode vom Dienst ausgeführt wird.
  2. Ich habe die Konsolenanwendung ausgeführt - die Anwendung wurde normal gestartet.
  3. Ich habe den Inhalt der Dienstkonfigurationsdatei in die Konsolenanwendungskonfigurationsdatei kopiert.
  4. Ich habe die Konsolenanwendung noch einmal ausgeführt - die Anwendung wurde stumm und sofort abgebrochen (überraschend ähnlich unserem Serviceverhalten, etwas stimmt nicht).
  5. Ich habe 2 Configs verglichen - vom Dienst und Original von der Konsolenanwendung. Als Ergebnis habe ich einige Unterschiede gefunden. Unter anderem gab es einen solchen Eintrag - die Ursache des Problems (nach dem Entfernen funktioniert alles):

    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    

Im Grunde hatte ich eine veraltete Konfigurationsdatei. Zuvor wurde der Dienst unter .NET 4.5 kompiliert. Danach habe ich das Framework auf 4.0 geändert und Dateien auf dem Server bereitgestellt, die vorherige Konfigurationsdatei jedoch beibehalten (das Zielframework wurde geändert, da mein Entwicklungscomputer über .NET 4.5 verfügt, während der Server dies tut nicht). Ich hätte nicht gedacht, dass die angezeigten Zeilen alle Probleme ohne vernünftige Informationen verdecken würden, was helfen könnte, das Chaos zu verfolgen.

10
jwaliszko

Überprüfen Sie auf fehlende Abhängigkeiten/DLLs.

Wenn Sie dies noch nicht getan haben, lassen Sie Ihren Dienst als normale Anwendung aufrufen (eine großartige Technik für das langfristige Debuggen) und prüfen Sie, ob er ordnungsgemäß auf Ihrem Windows 2008-Computer gestartet wird.

Wenn dies auf diese Weise funktioniert, liegt möglicherweise ein Problem mit der Ausführung im Konto LocalSystem vor. Fahren Sie fort, um Ihre Anwendung von einer Eingabeaufforderung aus zu starten, die im Konto "LocalSystem" ausgeführt wird ( Beispiel Setup hier ).

2
CoreTech

Ich habe den folgenden Fix ausprobiert, der unter link bereitgestellt wurde.

  1. Klicken Sie auf Start, klicken Sie auf Ausführen, geben Sie regedit ein und klicken Sie auf OK.

  2. Suchen Sie und klicken Sie auf den folgenden Registrierungsunterschlüssel: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control

  3. Suchen Sie im rechten Bereich den Eintrag ServicesPipeTimeout.
    Hinweis Wenn der Eintrag ServicesPipeTimeout nicht vorhanden ist, müssen Sie ihn erstellen. Führen Sie dazu die folgenden Schritte aus:
    ein. Zeigen Sie im Menü Bearbeiten auf Neu, und klicken Sie dann auf DWORD-Wert.
    b. Typ ServicesPipeTimeout, Und die EINGABETASTE dann drückt.
  4. Klicken Sie mit der rechten Maustaste auf ServicesPipeTimeout, und klicken Sie dann auf Ändern.
  5. Klicken Sie auf Dezimal, geben Sie 60000 ein, und klicken Sie dann auf OK.
    Dieser Wert gibt die Zeit in Millisekunden an, nach der ein Timeout eines Dienstes auftritt.
  6. Starte den Computer neu.

Trotzdem hatte ich das Problem, den Dienst zu starten.

Die Lösung, die für mich funktionierte, war

  1. Gehen Sie zum services.msc
  2. Doppelklicken Sie auf den Dienst, den Sie starten möchten.
  3. Nehmen Sie den Anmeldetab
  4. Geändert als: in lokales Systemkonto.
  5. Versuchte, den Dienst nach dieser Änderung zu starten (gab immer noch den 1053-Fehler an)
  6. Hat die Registerkarte "Anmelden" erneut übernommen und sie in "Netzwerkdienst" geändert (ein zufälliges neues Kennwort angegeben).
  7. Es wurde versucht, den Dienst erneut zu starten. (Der Dienst begann einwandfrei)

Nach der Installation des Dienstes muss ich die Vollzugriffsberechtigung (Jeder) für den Installationsordner erteilen. Dann wird mein Service perfekt gestartet.

0
user5185809

Ich habe die folgenden Schritte ausprobiert. Es hat wie ein Zauber funktioniert.

1.Gehen Sie zu services.msc 2. Doppelklicken Sie auf den Dienst, den Sie starten möchten . 3.Rufen Sie die Registerkarte Anmelden auf 4.Changed Melden Sie sich als: an Local System account . 5.Versuchen Sie, den Dienst nach dieser Änderung zu starten (gab immer noch den Fehler 1053 an) 6.Benommen Sie die Registerkarte Anmelden erneut, und ändern Sie sie in Netzwerkdienst (gab ein zufälliges neues Kennwort ein) wieder. (Der Service begann perfekt)

Aber ich möchte nur wissen, was das Problem sein wird.

0
Srinivasan