vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Timer für einen Windows-Dienst 
Autor: Muddy
Datum: 30.09.16 09:49

hallo zusammen,

Ich möchte in einem Dienst einen Timer verwenden, der alle 30 Minuten E-Mails innerhalb des Teams verschickt
abhängig vom angemeldeten User.
Leider stelle ich immer wieder bei der Timer-Routine fest, dass Windows nicht in die _Elapsed-Routine springt, wenn ich diese als Dienst ausführe. Wenn ich allerdings die gleiche Routine in einer Forms-Anwendung starte führt er diese _Elapsed-Routine aus.

Ich nutze die Klasse System.Timers.Timer, habe aber auch die System.Threading.Timer versucht.

    Protected Overrides Sub OnStart(ByVal args() As String)
        MyBase.OnStart(args)
        timer.Start()
    End Sub
 
    Protected Overrides Sub OnStop()
        MyBase.OnStop()
        timer.Stop()
    End Sub
 
    Private Sub InitializeComponent()
        Me.EventLog1 = New System.Diagnostics.EventLog()
        CType(Me.EventLog1, System.ComponentModel.ISupportInitialize).BeginInit( _
          )
 
        timer = New System.Timers.Timer(1000)
        AddHandler timer.Elapsed, AddressOf OnTimedEvent
 
        '
        'Service
        '
        Me.ServiceName = "PPS Mailing Service"
        CType(Me.EventLog1, System.ComponentModel.ISupportInitialize).EndInit()
 
    End Sub
 
 
 
    Private Sub OnTimedEvent(sender As Object, e As EventArgs)
        Dim mail As New clsMail
        Dim con As ADODB.Connection
        Dim rsMail As ADODB.Recordset
        Dim liPEZaehler As Long
        Dim sText As String
        con = DBOpenCon("Server", "Datenbank")
        liPEZaehler = PPSGetPEZaehlerByUser(Environment.UserName)
        rsMail = DBOpenRs(con, "E-Mail'")
        rsMail.MoveFirst()
        If rsMail.EOF Then
            Call ErrEvent(ErrType.ErrFatal, "Mail kann nicht gesendet werden")
        Else
            mail.SetMailServer = "Exchange"
            Call mail.InitMsg("mail@mail.de", "Testmail")
            Call mail.AppendTo("teammail@mail.de")
            sText = "AutoMail - Dienst" + vbNewLine
            Call mail.SetText(sText)
            Call mail.Send()
        End If
        rsMail.Close()
    End Sub
Dienst lässt sich installieren. Alle Methoden sind händisch eingegeben und nicht von VS erzeugt. Ich Entwickle mit Visual vb.net Express 2010
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Timer für einen Windows-Dienst 
Autor: effeff
Datum: 30.09.16 20:00

Zwar schlecht übersetzt, aber vielleicht hilft es: https://support.microsoft.com/de-de/kb/820639

Und hier noch was anderes: http://stackoverflow.com/questions/983540/why-will-this-timer-not-start-in-a-net-service-application

EALA FREYA FRESENA

Beitrag wurde zuletzt am 30.09.16 um 20:01:44 editiert.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Timer für einen Windows-Dienst 
Autor: Muddy
Datum: 12.10.16 14:02

Hallo zusammen,

leider habe ich zu diesem Thema noch immer keine Lösung gefunden. Weder über die Threading.Timer-Klasse noch über die Systems.Timers.Timer-Klasse konnte ich den Dienst zum Laufen bringen.

Jetzt habe ich allerdings eine allgemeine Frage noch dazu. Kann es denn sein, dass die Main-Methode von der Dienstverwaltung ignoriert wird sodass, auch keine Aufruf von InitializeComponents() durchgeführt wird? Denn eine Instanz von Timer muss ja Vorraussetzung sein. Und wie könnte ich das testen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Timer für einen Windows-Dienst 
Autor: effeff
Datum: 12.10.16 22:29

Gegenfrage: Warum benutzt Du nicht die Aufgabenplanung respektive Geplante Tasks?

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Timer für einen Windows-Dienst 
Autor: Muddy
Datum: 13.10.16 09:49

Das spielt für die Lösung denke ich keine Rolle. Die Lösung soll über ein Dienst laufen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel