web-dev-qa-db-fra.com

Erreur 1053, le service n'a pas répondu à la demande de démarrage ou de contrôle dans les délais

J'ai créé et installé un service plusieurs fois. Au début, cela fonctionnait bien, mais après quelques modifications dans le code de service, il commence à donner l'erreur lorsque je redémarre le service dans Services.msc:

Erreur 1053: le service n'a pas répondu à la demande de démarrage ou de contrôle dans les délais

Code:

public partial class AutoSMS : ServiceBase
{
    public AutoSMS()
    {
        InitializeComponent();
        eventLog1.Clear();

        if (!System.Diagnostics.EventLog.SourceExists("MySource"))
        {
            System.Diagnostics.EventLog.CreateEventSource(
                "MySource", "MyNewLog");
        }
        eventLog1.Source = "MySource";
        eventLog1.Log = "MyNewLog";

        Timer checkForTime = new Timer(5000);
        checkForTime.Elapsed += new ElapsedEventHandler(checkForTime_Elapsed);
        checkForTime.Enabled = true;

    }

    protected override void OnStart(string[] args)
    {
        eventLog1.WriteEntry("In OnStart");
    }

    protected override void OnStop()
    {
        eventLog1.WriteEntry("In onStop.");
    }


    void checkForTime_Elapsed(object sender, ElapsedEventArgs e)
    {
        string Time = "15:05:00";
        DateTime dateTime = DateTime.ParseExact(Time, "HH:mm:ss",
                                        CultureInfo.InvariantCulture);

        if (DateTime.Now == dateTime) ;
            eventLog1.WriteEntry(Time);
    }
}

Voici le code de ma méthode principale

static void Main()
{
    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[] 
    { 
        new AutoSMS() 
    };
    ServiceBase.Run(ServicesToRun);
}

J'ai aussi essayé les étapes suivantes:

  • Allez dans Démarrer> Exécuter> et tapez regedit
  • Accédez à: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
  • Avec le dossier de contrôle sélectionné, cliquez avec le bouton droit de la souris sur le volet de droite et sélectionnez la nouvelle valeur DWORD.
  • Nommez le nouveau DWORD: ServicesPipeTimeout 
  • Cliquez avec le bouton droit sur ServicesPipeTimeout, puis cliquez sur Modifier.
  • Cliquez sur Décimal, tapez '180000', puis cliquez sur OK.
  • Redémarrer le PC

J'avais l'habitude de l'installer et de le désinstaller avec la commande suivante:

installutil AutoSMS.exe

installutil /u AutoSMS.exe
40
Neeraj Verma

Dans mon cas, je publiais le service alors qu'il était en mode debug.

La solution était:

  • Passage de la solution au mode release 
  • Désinstallez l'ancien service à l'aide de la commande InstallUtil -u WindowsServiceName.exe
  • réinstaller le service InstallUtil -i WindowsServiceName.exe

Cela a parfaitement fonctionné après.

20
Pranav Singh

Comme d'autres l'ont souligné, cette erreur peut avoir une multitude de causes. Mais dans l'espoir que cela aidera quelqu'un, je partagerai ce qui s'est passé dans notre cas. Pour nous, notre service avait été mis à niveau vers .NET 4.5, mais le serveur n’avait pas installé .NET 4.5. 

19
JamesQMurphy

Je viens d'essayer ce code localement dans .Net 4.5 et le service démarre et s'arrête correctement pour moi. Je soupçonne que votre problème peut être autour de la création de la source EventLog.

La méthode:

EventLog.SourceExists("MySource")

exige que l'utilisateur qui exécute le code soit un administrateur, conformément à la documentation présentée ici:

http://msdn.Microsoft.com/en-us/library/x7y6sy21(v=vs.110).aspx

Vérifiez que le service s'exécute en tant qu'utilisateur disposant de privilèges d'administrateur.

9
devduder

J'ai rencontré le même problème et je ne savais pas du tout comment le résoudre. Oui, cela se produit car une exception est émise par le service, mais vous pouvez suivre quelques instructions générales pour corriger ceci:

  • Vérifiez que vous avez écrit le code correct pour démarrer le service: ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new WinsowsServiceToRun() }; ServiceBase.Run(ServicesToRun);
  • Vous devez vous assurer qu'il existe une sorte de boucle infinie dans la classe WinsowsServiceToRun

  • Enfin, il se peut que du code ne consomme rien et ferme le programme brusquement (ce qui était le cas pour moi). Dans ce cas, vous devrez suivre l’ancienne école de débogage qui nécessitait d’écrire une ligne vers une source (texte/db/n'importe où). Ce qui m'a fait face, c'est que puisque le compte qui exécute le service n'était pas "Admin", le code était en train de tomber et de ne consigner aucune exception s'il essayait d'écrire dans "Windows Event Log" alors que le code était là pour enregistrer les exceptions. . Les privilèges d'administrateur ne sont en réalité pas nécessaires pour se connecter à Even Log, mais pour définir la source. Si la source de l'événement n'est pas déjà définie dans le système et que le service tente de le consigner pour la première fois sans privilège administrateur, il échoue. Pour résoudre ce problème, suivez les étapes ci-dessous:

    1. Invite de commande ouverte avec privilège administrateur
    2. Collez la commande: eventcreate /ID 1 /L APPLICATION /T INFORMATION /SO <<Source>> /D "<<SourceUsingWhichToWrite>>"
    3. Appuyez sur Entrée
    4. Maintenant démarrez le service
9
Akash Sahay

C’est à cause du contrôle de service Microsoft Windows qu’il contrôle parfois l’état des services. Si le service n’envoie pas de réponse dans les 30 secondes, vous aurez cette erreur.

Vous pouvez modifier le registre pour que le service dispose de plus de temps pour répondre.

Go to Start > Run > and type regedit
Navigate to: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
With the control folder selected, right click in the pane on the right and select new DWORD Value
Name the new DWORD: ServicesPipeTimeout 
Right-click ServicesPipeTimeout, and then click Modify
Click Decimal, type '180000', and then click OK
Restart the computer

Ou assurez-vous qu’à ce moment-là, aucun autre processus ne parle avec le service, peut-être qu’il ya un conflit que je ne connais pas

4
Alberto Perez

Après avoir passé trop de temps sur cette question. J'ai trouvé la EventLog cause tout ce gâchis bien que je l'utilise correctement.

Quiconque s'attaque à ce problème, je vous conseillerais de vous débarrasser de EventLog. Utilisez de meilleurs outils comme " log4net ".

4
Jacob

Après avoir passé du temps à essayer de trouver des solutions qui ne fonctionnaient pas, je me suis heurté à ce blog . Il suggère d’envelopper le code d’initialisation du service dans un bloc try/catch, comme celui-ci, et d’ajouter EventLog.

using System;
using System.Diagnostics;
using System.ServiceProcess;

namespace WindowsService
{
    static class Program
    {
        static void Main()
        {
            try
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[] 
                { 
                    new Service1() 
                };
                ServiceBase.Run(ServicesToRun);
            }
            catch (Exception ex)
            {
                EventLog.WriteEntry("Application", ex.ToString(), EventLogEntryType.Error);
            }
        }
    }
}

Ensuite, désinstallez l’ancien service, redéployez-le avec ces modifications. Démarrez le service et extrayez les journaux de l'observateur d'événements/de l'application. Vous verrez quel est le véritable problème, qui est la raison sous-jacente du délai d'attente.

3
JS5

J'obtenais exactement le même problème, tout ce que j'ai fait est de changer le mode Debug en version pendant la compilation de la DLL Cela a résolu mon problème, comment/pourquoi? Je ne sais pas si j'ai déjà posé une question sur SO 

2
ahsant

Cochez ConnectionStrings si vous utilisez EntityFramework ou tout autre moyen d'initier des connexions de base de données au démarrage du service.

Dans mon cas, quand j'ai eu l'erreur Error 1053 the service did not respond to the start or control request in a timely fashion, c'est ce qui n'allait pas:

J'utilisais EntityFramework et la chaîne de connexion était erronée. Ainsi, au démarrage, EntityFramework n'a pas réussi à se connecter à la base de données en utilisant une chaîne de connexion incorrecte et a expiré.

Il suffisait de remplacer la chaîne de connexion à la base de données par la chaîne correcte et tout fonctionnait bien.

N'avait besoin d'aucune mise à jour du framework ni d'aucun autre changement de système/configuration.

Une des solutions possibles à ce problème [Il a résolu le problème de mon côté et mon application est une application basée sur Java]

1) vérifiez que votre application pointe sur la bonne version de Java (vérifiez la version de Java et le chemin dans votre application).

OU

2) vérifiez la version Java configurée: vérifiez s'il s'agit d'une version 32 bits ou d'une version 64 bits (en fonction de votre application). Si vous utilisez 32 bits, vous devez utiliser la version 32 bits JSL. Sinon, JSL entraînera ce problème.

1
Suresh Reddy

J'ai installé .Net 4.6 sur mon ordinateur Windows Server et l'erreur a été corrigée.

Votre contrôle devrait être comme suit:

  1. Vérifiez la version .net de votre WindowsService
  2. Puis vérifiez la version .net de votre ordinateur
  3. Correspond à cette version, car elle ne correspond probablement pas
1
Metin Atalay

Cela a fonctionné pour moi. En gros, assurez-vous que l’utilisateur d’ouverture de session est bien configuré. Cependant, cela dépend de la configuration de l’infrastructure du compte. Dans mon exemple, il utilise les informations d'identification de l'utilisateur du compte AD. 

Dans la boîte de recherche du menu de démarrage, recherchez «Services» -In Services trouve le service requis -right cliquez sur et sélectionnez l'onglet Connexion -Sélectionnez 'Ce compte' et entrez le contenu/informations d'identification requis -Ok et lance le service comme d'habitude

 enter image description here

1
d689p

cette erreur peut être due à différentes raisons. pour identifier la raison, ajoutez try/catch lorsque le service est exécuté.

        try
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[] 
                { 
                    new Service1() 
                };
                <span class="skimlinks-unlinked">ServiceBase.Run(ServicesToRun</span>);
            }
            catch (Exception ex)
            {
                EventLog.WriteEntry("Application", ex.ToString(), <span class="skimlinks-unlinked">EventLogEntryType.Error</span>);
            }
0
DevT

une des raisons possibles est:

incompatibilité de la version .net du service Windows et de la version .net de votre système.

0
Divyang Shah

Cela est généralement dû à une exception non interceptée dans le service lui-même. (Erreurs de fichier de configuration, par exemple). L'ouverture d'une invite de commande et le démarrage manuel de l'exécutable de service vous indiqueront peut-être que l'exception a été levée.

0
Robert Pouleijn

D'après mon expérience, j'ai dû arrêter mon service existant pour mettre à jour le code. après la mise à jour du code et le démarrage du service, le message d'erreur "Erreur 1053, le service n'a pas répondu à la demande de démarrage ou de contrôle dans les meilleurs délais". 

Mais cela a été résolu après le redémarrage de la machine. 

0
KirtiSagar

Je me suis gratté la tête pour effacer cette erreur Cette erreur peut être provoquée si vous la déboguez dans le code comme

static void Main()
{
 #if DEBUG
            MailService service = new MailService();
             service.Ondebug();
 #else
             ServiceBase[] ServicesToRun;
             ServicesToRun = new ServiceBase[]
             {
                 new MailService()
             };
             ServiceBase.Run(ServicesToRun);
 #endif
         }
     }

Après avoir effacé les if,else et endif dans le code comme celui-ci, l'erreur n'est pas apparue à nouveau .... espérons que cela aide ...

static void Main()
{

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

}
0
keshava shourie.b

Construire le service

Pour générer votre projet de service dans l'Explorateur de solutions, ouvrez le menu contextuel de votre projet, puis choisissez Propriétés. Les pages de propriétés de votre projet apparaissent . Dans l'onglet Application, dans la liste Objet de démarrage, choisissez MyService.Program.

0
Mahdi

En outre, vous devez vérifier le contenu de votre fichier de configuration. 

Vous devez vérifier ci-dessous la section.

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

La section ci-dessus doit correspondre à votre framework .net.

0
NoughT

Dans mon cas, le problème concernait la mise en cache de la configuration définie dans le fichier App.config. Une fois que j'ai supprimé les lignes ci-dessous du fichier App.config, le problème a été résolu.

<cachingConfiguration defaultCacheManager="MyCacheManager">
<cacheManagers>
  <add name="MyCacheManager" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
       expirationPollFrequencyInSeconds="60"
       maximumElementsInCacheBeforeScavenging="50000"
       numberToRemoveWhenScavenging="1000"
       backingStoreName="NullBackingStore" />
</cacheManagers>
<backingStores>
  <add type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
       name="NullBackingStore" />
</backingStores>

0
Burak Karakuş

J'ai eu le même problème… .. Décocher les options "Chanter le manifeste ClickOnce", "Signer l'assemblage" et "Activer les paramètres de sécurité ClickOnce" dans les propriétés du projet

0
user3210023

Je sais que c’est une vieille question, .__ j’écrivais mon propre service Windows VB.NET, et il n’a aucun problème à démarrer sous MS Windows 7 et MS Windows 10. 

J'ai ce problème lorsque j'installe les services Windows sur le dernier correctif MS Windows 10. Le service Windows ne s'exécute pas parce que la version .NET nécessaire à l'exécution des services Windows n'est pas présentée sur le PC installé.

Après avoir installé les services Windows. Allez dans le dossier d'installation, par exemple C:\Program files (x86)\Service1\Service1.exe et double-cliquez dessus pour l'exécuter. S'il manque un package du framework .NET, il sera invité à le télécharger. Il suffit de télécharger et d’attendre son installation.

Après cela, redémarrez les services Windows dans services.msc. J'espère que cette réponse aidera quelqu'un qui fait face au problème. Je sais que le problème est causé par la version du framework .NET.

0
Seng Yee Lee

Dans mon cas, il y avait apparemment dans mon fichier App.config des symboles supplémentaires que je n'avais pas remarqués lors de la construction de ma solution . Je recommande donc de vérifier le fichier de configuration pour rechercher les erreurs avant de commencer à modifier les clés de registre, puis à changer de mode , etc.

0
Anastasia

J'avais le même problème… .. On dirait que, lors du démarrage du service, le thread principal ne devrait pas être le thread de travail principal… .. En créant simplement un nouveau thread et en transférant le travail principal à ce thread, j'ai résolu le problème.

0
pieter de villiers

Vérifiez si le code de démarrage du service est correct,

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

En outre, supprimez tous les codes de débogage . 

  #If Debug
         ...
         ...
         ...
        #else
         ...
         ...
        #endif
0
Amey P Naik

J'avais deux services en cours d'exécution qui avaient été accidentellement couplés au même EventSource eventLog.Source = "MySource"; Après la désinstallation des deux services et la réinstallation de celui qui présentait l'erreur 1053, mon service a démarré normalement.

0

J'ai enlevé

EventLog.Exists

et fixe.

0
cacheoff

Mon problème était celui avec appsettings.json qui ne copiait pas dans le dossier de construction pendant la construction. Le placer simplement dans le dossier ...\bin\Release et copier le contenu de launchSettings.json dans appsettings.json résolvaient le problème.

0
EPS

Dans le cas que j'ai rencontré ce matin, le coupable était un fichier de configuration mal formé. Le fichier de configuration avait une balise de commentaire fermée sans la balise de commentaire ouverte. Donc, vérifiez vos fichiers de configuration pour les erreurs.

0