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:
J'avais l'habitude de l'installer et de le désinstaller avec la commande suivante:
installutil AutoSMS.exe
installutil /u AutoSMS.exe
Dans mon cas, je publiais le service alors qu'il était en mode debug.
La solution était:
InstallUtil -u WindowsServiceName.exe
InstallUtil -i WindowsServiceName.exe
Cela a parfaitement fonctionné après.
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.
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.
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:
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:
eventcreate /ID 1 /L APPLICATION /T INFORMATION /SO <<Source>> /D "<<SourceUsingWhichToWrite>>"
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
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 ".
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.
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
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.
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:
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
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>);
}
une des raisons possibles est:
incompatibilité de la version .net du service Windows et de la version .net de votre système.
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.
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.
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);
}
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.
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.
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>
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
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.
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.
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.
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
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.
J'ai enlevé
EventLog.Exists
et fixe.
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.
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.