Erreur 1053 le service n'a pas répondu à la demande de lancement ou de contrôle
J'ai écrit un Service Windows en C# que, fondamentalement, vérifie ma db à chaque minute pour les commandes, génère un fichier PDF à partir de ces commandes, et les mails, c'.
La logique fonctionne parfaitement dans mes tests, etc..
Quand j'ai créer le service, et l'installer en utilisant le projet d'installation, quand je vais pour lancer le service dans la console mmc services, j'obtiens:
erreur 1053 le service n'a pas répondu à la demande de lancement ou de contrôle en temps opportun
Ma méthode OnStart ressemble à ceci:
protected override void OnStart(string[] args)
{
//writeToWindowsEventLog("Service started", EventLogEntryType.Information);
timer.Enabled = true;
}
Fond, juste permet la minuterie... theres aucun processus intensif de l'appeler là-bas.
Où vais-je tort?
J'ai essayé de réglage de la startup compte système local, service réseau, etc... rien ne marche!
Edit:
Voici mon code: (processPurchaseOrders est la méthode où le db est interrogée et pdf sont générés etc...)
public partial class PurchaseOrderDispatcher : ServiceBase
{
//this is the main timer of the service
private System.Timers.Timer timer;
public PurchaseOrderDispatcher()
{
InitializeComponent();
}
//The main entry point for the process
static void Main()
{
#if (!DEBUG)
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { new PurchaseOrderDispatcher() };
ServiceBase.Run(ServicesToRun);
#else //debug code
PurchaseOrderDispatcher service = new PurchaseOrderDispatcher();
service.processPurchaseOrders();
#endif
}
private void InitializeComponent()
{
this.CanPauseAndContinue = true;
this.ServiceName = "Crocus_PurchaseOrderGenerator";
}
private void InitTimer()
{
timer = new System.Timers.Timer();
//wire up the timer event
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
//set timer interval
var timeInSeconds = Convert.ToInt32(ConfigurationManager.AppSettings["TimerIntervalInSeconds"]);
timer.Interval = (timeInSeconds * 1000); //timer.Interval is in milliseconds, so times above by 1000
timer.Enabled = true;
}
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
components.Dispose();
base.Dispose(disposing);
}
protected override void OnStart(string[] args)
{
//instantiate timer
Thread t = new Thread(new ThreadStart(this.InitTimer));
t.Start();
}
protected override void OnStop()
{
//turn off the timer.
timer.Enabled = false;
}
protected override void OnPause()
{
timer.Enabled = false;
base.OnPause();
}
protected override void OnContinue()
{
timer.Enabled = true;
base.OnContinue();
}
protected void timer_Elapsed(object sender, ElapsedEventArgs e)
{
processPurchaseOrders();
}
}
- Ce qui est dans votre constructeur si? Le problème pourrait être là.
- tout ce que j'ai dans mon constructeur est présent.CanPauseAndContinue = true; ce.ServiceName = "Crocus_PurchaseOrderGenerator";
- Où avez-vous instancier la minuterie? Jetez un oeil à l'exemple que j'ai posté ci-dessous (clifgriffin.com/2008/11/20/using-timers-in-a-c-windows-service) de la configuration de la minuterie dans un service windows
- j'ai édité la question et a ajouté tout le code....
- J'ai mis à jour ma réponse avec un exemple complet d'utilisation de la plupart de votre code. Il a commencé fine et j'ai été capable de fixer et de voir que l'événement était de tir.
Vous devez vous connecter pour publier un commentaire.
De MSDN:
"Ne pas utiliser le constructeur pour effectuer un traitement qui devrait être dans OnStart. Utilisation de Démarrage pour gérer l'initialisation de votre service. Le constructeur est appelé lors de l'exécutable de l'application s'exécute, pas quand le service s'exécute. L'exécutable s'exécute avant le Démarrage. Lorsque vous continuez, par exemple, le constructeur n'est pas appelé à nouveau, car le SCM est déjà titulaire de l'objet en mémoire. Si OnStop libère les ressources allouées dans le constructeur, plutôt que dans OnStart, les ressources nécessaires ne serait pas créé de nouveau la deuxième fois que le service est appelé".
Si votre minuterie n'est pas initialisé dans le Démarrage d'appel, cela pourrait être un problème.
Je voudrais aussi vérifier le type de minuterie, assurez-vous que d'un Système.Les minuteries.Minuterie pour les Services. Ici est un exemple de configuration de la minuterie dans un service windows.
//TODONT: Utiliser un Service Windows uniquement pour l'exécution d'un processus planifié
J'ai essayé votre code, et cela semble ok. La seule différence, je n'avais plus qu'à coder en dur la valeur du timer (Service1.cs). Permettez-moi de savoir si le ci-dessous ne fonctionne pas.
Service1.cs
Service1.Le concepteur.cs
Je viens de créer un vide projet de Service Windows et ajouter le ci-dessous afin que je puisse l'exécuter installutil.exe et le joindre à la ci-dessus pour voir si l'événement était de tir (et il l'a fait).
J'ai juste eu le même problème.
Il s'est avéré que c'était parce que je courais comme une console en mode debug - comme le code que vous avez au-dessus de
Et j'avais compilé en mode debug et installé le service
Quand je l'ai compilé en mode release, il a travaillé comme prévu
Espère que cette aide
Au cas où quelqu'un d'autre s'exécute sur ça dans le futur, j'ai reçu le même message d'Erreur 1053 lorsque vous essayez de démarrer mon service Windows Server 2012.
La question a fini par être que le service a été développé en ciblant les .NET framework 4.5.1, mais le Windows Server 2012, le tribunal n'a pas cette version de la .NET framework est installé. La sauvegarde du service vers la cible .NET 4.0 correction de l'erreur.
Le constructeur a été le problème pour moi. Le constructeur doit avoir été de jeter une excpetion sur les Dll manquantes.
Mon problème: mon inexpérience avec la création de programmes d'installation. Je n'ai pas les Dll dépendantes être copié dans le dossier d'installation (j'avais besoin de sélectionner la Version de configuration de la compilation lors de la création d'Principal du Projet de Sortie).
Cela a fonctionné pour moi. Fondamentalement, assurez-vous que la connexion de l'utilisateur est réglé à la bonne. Cependant, il dépend de la façon dont le compte de l'infrastructure est réglé. Dans mon exemple, c'est à l'aide AD en compte les informations d'identification utilisateur.
Dans le menu de démarrage de la recherche de la boîte de recherche pour 'Services'
-Dans Services trouver des services requis
-faites un clic droit et sélectionnez l'onglet connexion
-Sélectionnez "Ce compte" et saisissez le contenu/les informations d'identification
-Ok et démarrer le service comme d'habitude
Je vais à la console du serveur (le serveur) et salle de démarrer le service à partir de là. Distance dans l'habitude de travail.
Aussi eu cette erreur jusqu'à ce que j'ai trouvé qu'il y a un excès ">" personnage sur mon .fichier de configuration.
Alors, essayez de vérifier votre .fichier de configuration avant de avant de les raccorder votre ordinateur 😉
"
personnage à l'origine du problème.Dans mon cas; j'ai essayé d'installer une .Net 3.5 service de Windows 2012 serveur. Dans le serveur de l' .Net framework 4.0 est installé.
- Je changer ma cible cadre de service .Net 4.0. Maintenant, il fonctionne très bien.
La première chose qui est exécutée à partir de l'assembly qui contient le service est le Principal méthode . Et il doit prendre des mesures spéciales, ou au moins une de ces actions:
C'est ce que j'ai découvert après des essais et des erreurs de session lors de la création de mon premier service. Je n'ai pas utilisé de VS. J'ai fait d'utiliser VS guide (Procédure pas à pas: Création d'un Service Windows Application dans le Composant Designer), alors que je devrais plutôt utiliser celui-ci: La création d'un C# Service de l'Étape-par-Étape: Leçon que j'ai.
Sans convient Principale méthode de l'exécutable se termine immédiatement et système de rapports que 30 secondes, délai d'attente est dépassé 🙂
Comme moi. Dans 4.6.1 ne fonctionnent pas (j'ai le même message).
Puis-je l'essayer en 4.5 et fonctionnent très bien.
Si votre service de nom diffère de la réalité .exe nom de fichier, assurez-vous que vous n'avez pas un .exe avec le même nom que le service situé dans le même dossier que ce sera la cause de son échec.
Dans mon sitatuation j'ai eu un service appelé "Indice Reader", en pointant l'Index reader service.exe "et dans le même dossier un fichier exe appelé "Indice de reader.exe'. La suppression de ce a résolu le problème.
J'ai eu le même problème
Mais dans mon cas, quand j'ai reconstruire le programme d'installation des services à la libération.
Installer à nouveau le service et l'exécuter,
Le service a commencé à courir, sans aucun problème
Quand je vois un problème de ce genre, je serais toujours aller voir les de l'Observateur d'Événements premier. Il fournit beaucoup plus de détails essentiels pour l'enquête initiale et le débogage.
Souvent, nous oublions de l'Observateur d'Événements capture non gérée .net des exceptions d'exécution, qui peut être trouvé sous Journaux Windows > Application, puis filtrer par ID de l'Événement 1026 (.NET Runtime)