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.
InformationsquelleAutor Alex | 2009-11-04