2016-12-08 5 views
0

Ich habe einen Dienst erstellt, der zuvor auf mehreren Computern funktioniert hat und beim Debuggen problemlos funktioniert. Aber aus welchem ​​Grund auch immer, wird es nicht auf irgendwelchen Computern installieren, die ich kürzlich versucht habe.C# Service startet nicht mehr

Im Folgenden sind die Fragen, die ich in leite:

  • Programm nicht installieren, wenn ich das „Einschalten nach der Installation“ haben Eigentum auf. Code ist unten:

    new ServiceController(serviceInstaller1.ServiceName).Start(); 
    
  • Jedes Mal, wenn ich versuche, den Dienst mit dem obigen Code deaktiviert zu installieren, ist es tatsächlich installiert. Aber der Dienst weigert sich zu starten, wenn ich versuche, es manuell zu starten. Ich erhalte die folgende

„Fehler 1053:. Der Dienst hat nicht auf die Start- oder Steuerungsanforderung rechtzeitig reagieren“

Dinge, die ich habe versucht

  • verwendet "sc löschen". Der Dienst wurde zu 100% deinstalliert, es sei denn, ich bin so dumm.
  • deinstallierte Programm
  • das Setup-Projekt nach dem gleichen Führungs Rebuilt ich zuvor (wenn es funktioniert)
  • Neustart nach diesen

oben tun Bevor Sie

  • Keine Änderungen am System fragen wurden gemacht

Meine Frage ist, warum wird dieses Pro Gramm funktionieren perfekt während des Debuggens, werden aber nicht mehr installiert, nachdem es vor 3 Tagen perfekt funktioniert hat?

+0

Überprüfen Sie Windows Protokolle vielleicht gibt es Details. –

Antwort

1

Ohne Code das ist nur eine Vermutung zu sehen, aber der Fehler Ihnen einen großen Hinweis auf das Problem geben:

„Fehler 1053: Der Dienst reagierte nicht auf die Start- oder Steuerungsanforderung eines rechtzeitig."

Dies bedeutet, dass die Startmethode Ihres Dienstes nicht schnell genug für das System zurückkehrt. Wenn Sie den Dienst debuggen, wird er nicht als Dienst gestartet, daher wird dieser Test nie ausgelöst. Wenn das vor einiger Zeit funktionierte, müssen Sie in der Startmethode etwas zusätzliche Verarbeitung hinzugefügt haben.

Die einzige Lösung besteht darin, die gesamte Verarbeitung aus der Startmethode zu entfernen. Der normale Weg besteht darin, einen Hintergrund-Worker-Thread in der Startmethode zu starten, so dass er so schnell wie möglich zurückkehrt und stattdessen die gesamte Verarbeitung im Thread ausführt. Dann kann es so lange dauern, wie es benötigt wird.