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

VB.NET Discussion :

[2.0] Service windows ne fait rien


Sujet :

VB.NET

  1. #1
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut [2.0] Service windows ne fait rien
    Salut,

    J'essaie de créer mon tout premier service windows. Je m'inspire donc du tutoriel et de cette discussion qui s'en est inspirée, mais je n'arrive à rien.
    Je soupçonne une mauvaise utilisation du timer. J'ai vu ici et là comme réponse "utilise un de ces timers System.Timers.Timer ou System.Threads.Timer plutôt que System.Windows.Forms.Timer".
    mais bon, le tuto utilise le windows.forms, le fil dont je m'inspire aussi, le glisser/déposer le propose. Donc avant tout autre changement je souhaiterais que ça fonctionne avec System.Windows.Forms.Timer.

    Pour que vous m'aidiez, je n'aime pas trop ça et j'en suis désolé, je n'ai pas d'autre choix que de poster le code complet. Code qui n'est pas non plus conséquent tout de même.

    SMemoire.vb :
    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
    Imports System.Net.Mail
     
    Public Class SMemoire
     
        Protected Overrides Sub OnStart(ByVal args() As String)
            ' Ajoutez ici le code pour démarrer votre service. Cette méthode doit
            ' démarrer votre service.
            EventLog1.WriteEntry("Démarrage du service")
            Timer2.Enabled = True
        End Sub
     
        Protected Overrides Sub OnStop()
            ' Ajoutez ici le code pour effectuer les destructions nécessaires à l'arrêt de votre service.
            EventLog1.WriteEntry("Arrêt du service")
            Timer2.Enabled = False
        End Sub
     
        Private Sub Timer2_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer2.Tick
            Dim smtp As SmtpClient = New SmtpClient
            Dim message As MailMessage = New MailMessage
     
            smtp.Host = "smtp.smtp.com"
            message.To.Clear()
            message.To.Add("f@c.com")
            message.From = New MailAddress("f@c.com")
            message.Subject = "Service Windows"
            message.Body = "Je teste le service Windows"
            smtp.Send(message)
            Timer2.Stop()
     
     
            EventLog1.WriteEntry("Email envoyé%")
        End Sub
     
        Public Sub New()
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
            Timer2.Interval = 60000
            Timer2.Start()
        End Sub
    End Class
    SMemoire.Designer.vb :
    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
    Imports System.ServiceProcess
     
    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial Class SMemoire
        Inherits System.ServiceProcess.ServiceBase
     
        'UserService remplace la méthode Dispose pour nettoyer la liste des composants.
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            Try
                If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                End If
            Finally
                MyBase.Dispose(disposing)
            End Try
        End Sub
     
        ' Point d'entrée principal du processus
        <MTAThread()> _
        <System.Diagnostics.DebuggerNonUserCode()> _
        Shared Sub Main()
            Dim ServicesToRun() As System.ServiceProcess.ServiceBase
     
            ' Plusieurs services NT s'exécutent dans le même processus. Pour ajouter
            ' un autre service à ce processus, modifiez la ligne suivante
            ' pour créer un second objet service. Par exemple,
            '
            '   ServicesToRun = New System.ServiceProcess.ServiceBase () {New Service1, New MySecondUserService}
            '
            ServicesToRun = New System.ServiceProcess.ServiceBase() {New SMemoire}
     
            System.ServiceProcess.ServiceBase.Run(ServicesToRun)
        End Sub
     
        'Requise par le Concepteur de composants
        Private components As System.ComponentModel.IContainer
     
        ' REMARQUE : la procédure suivante est requise par le Concepteur de composants
        ' Elle peut être modifiée à l'aide du Concepteur de composants.  
        ' Ne la modifiez pas à l'aide de l'éditeur de code.
        <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub InitializeComponent()
            Me.components = New System.ComponentModel.Container
            Me.EventLog1 = New System.Diagnostics.EventLog
            Me.Timer2 = New System.Windows.Forms.Timer(Me.components)
            CType(Me.EventLog1, System.ComponentModel.ISupportInitialize).BeginInit()
     
            '
            'EventLog1
            '
            Me.EventLog1.Log = "JournalMemoire"
            Me.EventLog1.Source = "ServiceMemoire"
            '
            'SMemoire
            '
            Me.ServiceName = "SMemoire"
            CType(Me.EventLog1, System.ComponentModel.ISupportInitialize).EndInit()
     
        End Sub
        Friend WithEvents EventLog1 As System.Diagnostics.EventLog
        Friend WithEvents Timer2 As System.Windows.Forms.Timer
     
    End Class
    Voyez-vous ce que je fais de mal?

    Merci par avance.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  2. #2
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Bon j'ai finalement utilisé System.Threading.Timer. Seulement, j'ai une erreur. Le service est censé s'exécuter toutes les minutes, ce qu'il fait, mais une fois sur deux il me retourne cette erreur :
    Erreur lors du traitement. La réponse du serveur était : timeout (#4.4.2)
    Cela vient sûrement de la création du timer, je ne comprends pas bien les arguments à définir. Voici mon code:
    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
    Imports System.Net.Mail
    Imports System.Threading
     
    Public Class SMemoire
        Protected Overrides Sub OnStart(ByVal args() As String)
            ' Ajoutez ici le code pour démarrer votre service. Cette méthode doit
            ' démarrer votre service.
            EventLog1.WriteEntry("Démarrage du service")
        End Sub
     
        Protected Overrides Sub OnStop()
            ' Ajoutez ici le code pour effectuer les destructions nécessaires à l'arrêt de votre service.
            EventLog1.WriteEntry("Arrêt du service")
        End Sub
     
        Public Sub New()
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            Dim autoEvent As New Threading.AutoResetEvent(False)
            Dim statusChecker As New MF_Email
            Dim timerDelegate As TimerCallback = AddressOf MF_Email.envoyerEmail
     
            Dim Timer2 As Timer = New Timer(timerDelegate, autoEvent, 0, 60000)
        End Sub
    End Class
     
    Public Class MF_Email
        Shared Sub envoyerEmail(ByVal stateInfo As Object)
            Dim autoEvent As AutoResetEvent = DirectCast(stateInfo, AutoResetEvent)
            Dim EventLog1 As New System.Diagnostics.EventLog
     
            Dim smtp As SmtpClient = New SmtpClient
            Dim message As MailMessage = New MailMessage
     
            EventLog1.Log = "JournalMemoire"
            EventLog1.Source = "ServiceMemoire"
            Try
                smtp.Host = "smtp.smtp.com"
                message.To.Clear()
                message.To.Add("f@c.com")
                message.From = New MailAddress("f@c.com")
                message.Subject = "Service Windows"
                message.Body = "Je teste le service Windows"
                smtp.Send(message)
     
                EventLog1.WriteEntry("Email envoyé")
            Catch ex As Exception
                Beep()
                EventLog1.WriteEntry(ex.Message)
            End Try
        End Sub
    End Class
    Voyez-vous ce que c'est?
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  3. #3
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Finalement, l'utilisation du timer est correcte. C'est l'envoi d'email qui pêche et j'utilise une dll pour cela.

    Le problème est donc résolu, merci à moi-même.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

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

Discussions similaires

  1. Service démarré mais qui ne fait rien
    Par jodan33 dans le forum Langage
    Réponses: 9
    Dernier message: 14/12/2012, 11h43
  2. Réponses: 0
    Dernier message: 14/05/2009, 16h06
  3. SOAP::Lite entant que service ne fait rien
    Par spax dans le forum Web
    Réponses: 0
    Dernier message: 23/03/2009, 11h35
  4. Réponses: 10
    Dernier message: 16/11/2006, 21h36
  5. [C#] Icône, barre des tâches et Service Windows
    Par SErhio dans le forum Windows Forms
    Réponses: 17
    Dernier message: 03/09/2004, 12h56

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