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.