IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Windows Discussion :

Erreur lancement service windows [Débutant]


Sujet :

Développement Windows

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 42
    Points : 20
    Points
    20
    Par défaut Erreur lancement service windows
    Bonjour,

    Dans le cadre d'un projet, je souhaite créer un service qui mettrait à jour ma base de données et qui envoie un mail aux clients dans un certains cas toutes les 15 minutes.

    J'ai suivi les différents tutoriaux disponibles sur internet pour créer mon service. Lorsque je créé mon service sans compléter le code pour le OnStart() ou OnStop(), j'arrive à lancer mon service. Certes rien ne se passe, mais je peux lancer mon service. J'ai choisi d'intégrer le projet contenant mon service dans ma solution complète (contenant le reste de mon application). Je me retrouve donc avec cette arborescence :

    Nom : 1.png
Affichages : 250
Taille : 2,9 Ko

    Hors comme je l'ai dis, je souhaite envoyer des mails toutes les 15 minutes. J'ai donc ajouté un Timer dans le Designer de mon service pour lequel je définit son intervalle de temps et pour lequel je définit le code pour la fonction Tick(). Je lance le Timer lorsque je démarre mon service. Je me retrouve avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Configuration;
    using System.Data;
    using System.Diagnostics;
    using System.Linq;
    using System.Net.Mail;
    using System.ServiceProcess;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace Extranet.Services {
        public partial class ServiceAlerte : ServiceBase {
     
            public ServiceAlerte() {
                InitializeComponent();
            }
     
            protected override void OnStart(string[] args) {
                timer_Envoie.Start();
            }
     
            protected override void OnStop() {
                timer_Envoie.Stop();
            }
     
            private void timer_Envoie_Tick(object sender, EventArgs e) {
                EnvoieMail();
            }
     
            private void EnvoieMail(){            
                try {
                    SmtpClient client = new SmtpClient(ConfigurationManager.AppSettings["IP"], int.Parse(ConfigurationManager.AppSettings["Port"]));
                    //Authentification obligatoire pour sortir ?!
                    client.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["Compte"], ConfigurationManager.AppSettings["MDP"]);
                    //Expediteur
                    MailAddress _from = new MailAddress("mail", "Entête", Encoding.UTF8);
                    //Destinataire
                    MailAddress _to = new MailAddress("mailTo");
                    //Message associé à l'expediteur et le destinataire
                    MailMessage message = new MailMessage(_from, _to);
     
                    //Texte du mail : 
                    String body = "Some texte";
                    //Construction du body
                    message.Body = body;
                    message.BodyEncoding = Encoding.UTF8;
                    message.Subject = "Sujet";
                    message.SubjectEncoding = Encoding.UTF8;
                    //Envoie du message
                    client.Send(message);
                    message.Dispose();
                } catch (Exception ex) {
                    throw new ApplicationException(ex.Message);
                }
            }
        }

    Mon code est simplifié afin d'expliquer mon problème. Lors de la création de mon service aucun problème, je le retrouve bien dans la liste de mes services existants. Le problème intervient lorsque je souhaite le lancer, je tombe sans cesse sur cette erreur que je ne comprend pas vraiment :

    Nom : 2.png
Affichages : 300
Taille : 8,3 Ko


    Quelqu'un saurait-il m'aider ? Merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 173
    Points : 485
    Points
    485
    Par défaut
    Tu aurais le code pour ton timer car tu fais un start mais il ne lance rien.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Je n'ai pas de code associé à l’événement Start de mon timer. La méthode Start va juste démarrer la minuterie comme expliquer dans la doc, mon objectif étant de d'envoyer mes mails toutes les 15 minutes donc lors de l'événement Tick (ou Elapsed). Mon code à effectuer se trouve lors du déclenchement de ce dernier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    private void EnvoieMail(){            
        try {
            SmtpClient client = new SmtpClient(ConfigurationManager.AppSettings["IPServeurMessagerie"], int.Parse(ConfigurationManager.AppSettings["PortServeurMessagerie"]));
            //Authentification obligatoire pour sortir ?!
            client.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["CompteExtranet"], ConfigurationManager.AppSettings["MDPExtranet"]);
            //Expediteur
            MailAddress _from = new MailAddress("jdavid@habitat44.org", "HABITAT44", Encoding.UTF8);
            //Destinataire
            MailAddress _to = new MailAddress("jdavid@habitat44.org");
            //Message associé à l'expediteur et le destinataire
            MailMessage message = new MailMessage(_from, _to);
     
            //Texte du mail : 
            String body = "ugkdvb doqfu douf fquofg ";
            //Construction du body
            message.Body = body;
            message.BodyEncoding = Encoding.UTF8;
            message.Subject = "TEST";
            message.SubjectEncoding = Encoding.UTF8;
            //Envoie du message
            client.Send(message);
            message.Dispose();
        } catch (Exception ex) {
            throw new ApplicationException(ex.Message);
        }
    }

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 173
    Points : 485
    Points
    485
    Par défaut
    Par contre je ne vois pas (dans ton code du début) quand tu définis le timer avec dedans le temps (les 15minutes) et aussi l'évènement associer.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Ah oui, je l'ai instancié via le designer graphique. Le code est générer automatiquement.

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 173
    Points : 485
    Points
    485
    Par défaut
    et tu es sur que le timer fonctionne bien ?
    as-tu essayé de débugger ton service pour voir si ça passe bien dans SendMail et dans le OnStart etc ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Je suis sûr de rien puisque je n'arrive pas à débugger mon service. Si tu pouvais m'expliquer comment je peux faire ? J'ai essayer de débugger mais je passe pas dans mon debuggueur !
    Après, je sais que le problème ne vient pas du timer puisque lorsque je fais un envoie simple d'un mail sans passer par la fonction Tick du timer(Je fais l'envoie dans le OnStart du service), ça ne fonctionne pas non plus.

  8. #8
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 173
    Points : 485
    Points
    485
    Par défaut
    Alors normalement tu dois pouvoir mettre un point d'arret et attacher le debugger à ton service.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Oui c'est ce que j'ai essayer de faire, j'ai placé mon point d'arrêt au niveau de ma fonction OnStart. Puis j'ai attacher au processus, dans l'onglet "Déboguer" -> "Attacher au processus" mais lorsque je lance mon service je ne passe absolument pas dans mon débogueur :s . Pourrais-tu expliquer mon erreur ?

  10. #10
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 173
    Points : 485
    Points
    485
    Par défaut
    Ca voudrait dire que ton service ne se lance même pas et donc ça vient d'autre part.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Après de nombreuses recherches et de nombreux tests, j'ai trouvé l'origine de mon problème ici.
    Il faut faire attention au timer utilisé ! Il existe deux types de timer, le System.Timers.Timer et le System.Windows.Forms.Timer . Lorsque l'on insère des objets graphiques issus de System.Windows.Forms, une exception se lance et plante le service. D'où mon erreur !

    Voici mon code pour ceux que cela intéresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Configuration;
    using System.Data;
    using System.Diagnostics;
    using System.Linq;
    using System.Net.Mail;
    using System.ServiceProcess;
    using System.Text;
    using System.Threading.Tasks;
    using System.Timers;
     
     
    namespace Extranet.Services {
        public partial class ServiceAlerte : ServiceBase {
     
            private Timer _timer;
     
            public ServiceAlerte() {
                InitializeComponent();
            }
     
     
            protected override void OnStart(string[] args) {
                _timer = new Timer();
                _timer.Interval = 10000;
                _timer.Start();
                _timer.Elapsed += _timer_Elapsed;
            }
     
            void _timer_Elapsed(object sender, ElapsedEventArgs e) {
                EnvoieMail();
            }
     
     
     
            protected override void OnStop() {
                _timer.Stop();
            }
     
     
     
            private void EnvoieMail(){            
                try {
                    SmtpClient client = new SmtpClient(ConfigurationManager.AppSettings["IPServeurMessagerie"], int.Parse(ConfigurationManager.AppSettings["PortServeurMessagerie"]));
                    //Expediteur
                    MailAddress _from = new MailAddress("mail", "Objet", Encoding.UTF8);
                    //Destinataire
                    MailAddress _to = new MailAddress("mail");
                    //Message associé à l'expediteur et le destinataire
                    MailMessage message = new MailMessage(_from, _to);
     
                    //Texte du mail : 
                    String body = "body";
                    //Construction du body
                    message.Body = body;
                    message.BodyEncoding = Encoding.UTF8;
                    message.Subject = "Sujet";
                    message.SubjectEncoding = Encoding.UTF8;
                    //Envoie du message
                    client.Send(message);
                    message.Dispose();
                } catch (Exception ex) {
                    throw new ApplicationException(ex.Message);
                }
            }
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur démarrage service windows
    Par mimi1255 dans le forum Windows
    Réponses: 0
    Dernier message: 17/11/2013, 00h25
  2. Définition lancement service windows
    Par Erazion dans le forum C#
    Réponses: 3
    Dernier message: 29/03/2012, 17h33
  3. erreur lancement service au démarrage
    Par Steph0 dans le forum Debian
    Réponses: 2
    Dernier message: 25/08/2011, 11h40
  4. Erreur lancement sur Windows 7
    Par icornato dans le forum VB.NET
    Réponses: 2
    Dernier message: 05/12/2009, 20h33
  5. Lancement service windows
    Par max12 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 07/08/2007, 15h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo