Problème démarrage service Windows

Le grand Jisay Messages postés 100 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 18 février 2011 - 22 nov. 2007 à 09:15
bernie666 Messages postés 427 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 29 janvier 2008 - 22 nov. 2007 à 16:29
Bonjour à tous !

Voila, j'ai un projet pour mon cours de programmation C#. Ce projet c'est un service Windows. Mon service doit envoyer des mails à intervalles réguliers, pour le code aucun problème. C'est au niveau du démarrage du service que ca se passe mal. Mon service s'installe avec un fichier .msi. Je lance ce fichier, le service s'installe sans problème, mais quand je démarre mon service, là c'est le drame... J'ai le message d'erreur qui suit :

"Le service Service Envoi Mail sur Ordinateur local a démarré puis s'est arrêté. Certains services peuvent s'arrêter automatiquement s'ils n'ont aucune tâche à effectuer, par exemple, le service des alertes et les journaux de performances."

Au départ je pensais que la cause était mon service : il ne devait qu'écrire dans le gestionnaire d'événements mais j'ai ensuite ajouter l'envoi de mails mais rien n'y fait : toujours se message d'erreur qui s'affiche au démarrage.

Je vous demande votre aide, j'ai sillonné le web mais je n'ai toujours pas trouvé la solution à mon problème.

Merci d'avance

8 réponses

bernie666 Messages postés 427 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 29 janvier 2008 1
22 nov. 2007 à 11:21
Salut,

Est ce que tu traces les exceptions dans le journal d'application ?

tu dois avoir une erreur quelque part qui te fait planter le service au démarage.

Sinon tu peux essayer de copier le code au niveau de ton service NT dans une application console pour simuler le lancement du service et passer en mode debug pas a pas afin de voir ce qu'il ce passe.

Bonne journée

++

-------------------------------------------http://quoideneufaujourdhui.spaces.live.com
0
Le grand Jisay Messages postés 100 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 18 février 2011 2
22 nov. 2007 à 11:37
Salut,

Dans l'Observateur d'événement j'ai un message d'erreur :

Le service ne peut pas être démarré. System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.
   à Service_Mail.Service1.OnStart(String[] args)
   à System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

Je ne comprends pas trop ce que ca veut bien dire et je n'ai pas trouvé non plus d'aide sur le net.

J'ai également tenté de débugué mon service mais pas moyen, il ne s'arrête nulle part. 

Help please !

Le grand Jisay
0
bernie666 Messages postés 427 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 29 janvier 2008 1
22 nov. 2007 à 11:45
Afin de pouvoir débuguer ton service, il faut attacher le process de ce dernier au debugger de visual studio mais vu que c'est dans le onStart tu va avoir du mal l'attacher. C'est pour ca que le simuler dans une application console peut etre une bonne solution.

Sinon pour l'erreur que tu as ... c'est juste au niveau de ton code dans le on start que tu a un objet qui n'est pas instancier.

Tu peux poster le code de ton service.cs ?

++

-------------------------------------------http://quoideneufaujourdhui.spaces.live.com
0
Le grand Jisay Messages postés 100 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 18 février 2011 2
22 nov. 2007 à 12:14
Yep,

Voila mon code :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Threading;

namespace Service_Mail
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            // TODO : ajoutez ici le code pour démarrer votre service.µ
            timer1.Interval = 6000;
            timer1.Start();
            eventLog1.WriteEntry("Service démaré");
        }

        protected override void OnStop()
        {
            // TODO : ajoutez ici le code pour effectuer les destructions nécessaires à l'arrêt de votre service.
            eventLog1.WriteEntry("Service stoppé");
        }

        private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            Execute();
        }

        private void Execute()
        {
            eventLog1.WriteEntry("timer tick");
        }
    }
}

Ici ce n'est juste qu'un truc bidon pour voir si mon service démarrait correctement (sans stoppé) et je précise que le Timer n'est pas un Timer de windows Form mais bien un Timer pour service windows

Merci pour ton aide bernie666 !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le grand Jisay Messages postés 100 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 18 février 2011 2
22 nov. 2007 à 12:26
J'avais aussi pensé à l'utilisation d'un thread mais je ne vois pas comment l'intégrer dans mon service...

Enfin voila, ce n'est qu'une piste mais je ne suis pas du tout expert dans le domaine des trheads :-s

Merci d'avance,

Le grand Jisay
0
bernie666 Messages postés 427 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 29 janvier 2008 1
22 nov. 2007 à 14:57
Tu as installer ton service avec le compte par defaut ? ou avec ton compte user ? c'est peut etre un probleme de droit car avec le compte par defaut tu n'as pas les droits d'écrire dans le journal des évenements.

De plus il faut que tu rajoute la clef de registre :

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\EventLog\Application

Ici tu mets une nouvelle clée qui a le meme nom que ton Service
ajouter une valeure de chaine "EventMessageFile"
qui a comme valeure : "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll"

Tu peux également encapsuler ton code dans des blocs Try Catch afin de ne pas faire peter ton service ;)

++

-------------------------------------------http://quoideneufaujourdhui.spaces.live.com
0
Le grand Jisay Messages postés 100 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 18 février 2011 2
22 nov. 2007 à 16:08
Voila j'ai trouvé le problème... C'était bien dans ce que tu m'avais dit : le compte était par défaut...

J'ai retrouver le meme problème en mettant un code pour retrouver le répertoire d'un fichier XML : j'ai placé ceci :

xmldocument doc = new xmldocument();
doc.load(System.Reflection.Assembly.GetEntryAssembly().GetFile("option_mail.xml").Name.ToString());

Ca ne fonctionne pas et je ne trouve pas comment charger un fichier qui est dans le répertoire d'installation de mon service.

Merci de m'aider,

Le Grand Jisay et encore merci bernie666
0
bernie666 Messages postés 427 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 29 janvier 2008 1
22 nov. 2007 à 16:29
tu as quoi comme message d'erreur ?

et si tu connais le nom de ton fichier xml + vu que tu l'as placer dans le repertoire d'installation :
doc.Load(

"monFichier.xml");

ou passer par un fichier de configuration ou tu spécifie le chemin à ce fichier.

-------------------------------------------http://quoideneufaujourdhui.spaces.live.com
0
Rejoignez-nous