Imports System.IO 'Imports System.Collections.ObjectModel Imports System.ComponentModel Public Class DDWDResultHandler #Region "+++++ Variablen +++++" Public Shared _windream As New ClassWMResulthandler.clsWindream_allgemein Public Shared threadRunner As BackgroundWorker Public Shared _PROFIL_ID As Integer Dim _INTERVALL As Integer 'Variablen für Dateiimporter #End Region Public Sub New() MyBase.New() InitializeComponent() End Sub Protected Overrides Sub OnStart(ByVal args() As String) ' Code zum Starten des Dienstes hier einfügen. Diese Methode sollte Vorgänge ' ausführen, damit der Dienst gestartet werden kann. 'EventLog1.WriteEntry("Dienst 'DD windream Result Handler' gestartet") Try If Not System.Diagnostics.EventLog.SourceExists("DDWMResultHandler") Then System.Diagnostics.EventLog.CreateEventSource("DDWMResultHandlerr", "DigitalData Log") End If Catch ex As Exception EventLog.WriteEntry("DDWMResultHandler", "ERROR in Creating source:" & ex.ToString(), EventLogEntryType.Error) End Try Try Try clsLogger.Init(My.Application.Info.DirectoryPath & "\Log", "_SERVICEResultHandler") clsLogger.Add("WindreamResultHandler gestartet - " & Now, False) Catch ex As Exception EventLog.WriteEntry("DDWMResultHandler", "ERROR in CREATING-LOG:" & ex.ToString(), EventLogEntryType.Error) End Try If My.Settings.SQLSERVER_CS = String.Empty Then clsLogger.Add("Achtung: Es wurde noch kein Datenbank-ConnectionString hinterlegt.", True) Else If ClassWMResulthandler.clsDatatabase.Init(My.Settings.SQLSERVER_CS) = False Then clsLogger.Add("Achtung: Es konnte keine Verbindung zur Datenbank '" & My.Settings.SQLSERVER_CS & "' hergestellt werden!", True) clsLogger.WriteLog() Else ' '#Thread für Durchlauf generieren DDWDResultHandler.threadRunner = New BackgroundWorker() DDWDResultHandler.threadRunner.WorkerReportsProgress = True DDWDResultHandler.threadRunner.WorkerSupportsCancellation = True AddHandler threadRunner.DoWork, AddressOf RUN_THREAD AddHandler threadRunner.RunWorkerCompleted, AddressOf Thread_Completed ' '### Den Timer generieren Dim Timer_Durchlauf As New System.Timers.Timer() 'Das Event hinterlegen welches bei "Tick" ausgelöst wird AddHandler Timer_Durchlauf.Elapsed, AddressOf Thread_Run ' Set the Interval Timer_Durchlauf.Interval = 60000 'ClassLogger.Add("Timer - Intervall: " & clsSQLITE.konf_intervall & " Minuten", False) Timer_Durchlauf.Enabled = True clsLogger.AddDetailLog("Timer gestartet") ' Und den Durchlauf das erste Mal starten threadRunner.RunWorkerAsync() End If End If Catch ex As Exception EventLog.WriteEntry("DDWMResultHandler", "Unexpected error in OnStart: " & ex.ToString(), EventLogEntryType.Error) clsLogger.AddError(ex.Message, "OnStart") End Try End Sub Public Shared Sub Thread_Run() If Not threadRunner.IsBusy Then threadRunner.RunWorkerAsync() End If End Sub Protected Overrides Sub OnStop() Try ' Hier Code zum Ausführen erforderlicher Löschvorgänge zum Beenden des Dienstes einfügen. 'EventLog1.WriteEntry("Dienst 'DD windream Result Handler' gestoppt") clsLogger.Add("WindreamResultHandler wurde gestoppt - " & Now, False) ClassWMResulthandler.clsDatatabase.Execute_non_Query("Update TBWMRH_PROFIL SET Running = 1 WHERE GUID = " & _PROFIL_ID) clsLogger.Add("", False) clsLogger.WriteLog() Catch ex As Exception EventLog.WriteEntry("DDWMResultHandler", "Unexpected error in OnStop: " & ex.ToString(), EventLogEntryType.Error) End Try End Sub Public Shared Sub RUN_THREAD(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Try Dim notcompleted As Boolean = False clsLogger.Init(My.Application.Info.DirectoryPath & "\Log", "_SERVICEResultHandler") clsLogger.Add("Start Durchlauf WindreamResultHandler - " & Now, False) clsLogger.Add("", False) 'windream initialisieren If _windream.Init() = True Then clsLogger.AddDetailLog("windream vollumfänglich initialisiert!") 'Zur sicherheit die DB nochmal initialiseren If ClassWMResulthandler.clsDatatabase.Init(My.Settings.SQLSERVER_CS) = True Then Dim DT As DataTable = ClassWMResulthandler.clsDatatabase.Return_Datatable("select * from TBWMRH_KONFIGURATION where GUID = 1") If DT.Rows.Count = 1 Then ClassWMResulthandler.clsCURRENT.LOG_ERRORS_ONLY = DT.Rows(0).Item("LOG_ERRORS_ONLY") If ClassWMResulthandler.clsCURRENT.LOG_ERRORS_ONLY = False Then clsLogger.Add("Detaillog is ON!", False) End If ClassWMResulthandler.clsCURRENT.WDLAUFWERK = DT.Rows(0).Item("WD_LAUFWERK") End If DT = ClassWMResulthandler.clsDatatabase.Return_Datatable("SELECT GUID FROM TBWMRH_PROFIL WHERE AKTIV = 1 order by REIHENFOLGE") If DT.Rows.Count > 0 Then clsLogger.AddDetailLog("Anzahl der aktiven Profile: " & DT.Rows.Count.ToString) For Each DR As DataRow In DT.Rows _PROFIL_ID = CInt(DR.Item("GUID")) 'Und nun das Profil durchlaufen Dim initresult = ClassWMResulthandler.clsProfil.Init(_PROFIL_ID) If initresult = True Then clsLogger.WriteLog() ClassWMResulthandler.clsProfil.Profil_Durchlauf() ElseIf initresult = False Then clsLogger.Add("clsProfil konnte nicht initialisiert werden", True, "RUN_THREAD") notcompleted = True ElseIf initresult = 0 Then clsLogger.AddDetailLog("initresult: 0") notcompleted = True ElseIf initresult = 1 Then clsLogger.AddDetailLog("initresult: 1") notcompleted = True End If Next Else clsLogger.Add("Keine aktiven Profile vorhanden", False) notcompleted = True End If ClassWMResulthandler.clsDatatabase.Execute_non_Query("UPDATE TBWMRH_KONFIGURATION SET LAST_TICK = GETDATE() WHERE GUID = 1") Else clsLogger.Add("clsDatabase konnte nicht initialisiert werden!", False) notcompleted = True End If Else clsLogger.Add("# Achtung: Windream-Init mit Fehlern beendet", False) notcompleted = True End If If notcompleted = True Then clsLogger.WriteLog() End If Catch ex As Exception clsLogger.AddError(ex.Message, "RUN_THREAD") End Try End Sub #Region "*** BackgroundWorker beenden und Abbrechen ***" Private Shared Sub Thread_Completed(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) 'Handles threadDateiimport.RunWorkerCompleted ' This event fires when the DoWork event completes Try Dim result As String = "" If e.Cancelled Then clsLogger.Add("Der Process wurde durch den Anwender abgebrochen", False) clsLogger.WriteLog() ElseIf e.Error IsNot Nothing Then clsLogger.Add("Fehler bei Durchlauf. Der Vorgang wird abgebrochen.", True, "Thread_Completed") clsLogger.Add(e.Error.Message, True, "Thread_Completed") clsLogger.WriteLog() End If 'If DI_Verzeichnisloeschen Then ' Try ' My.Computer.FileSystem.DeleteDirectory(DI_Quellordner, FileIO.DeleteDirectoryOption.ThrowIfDirectoryNonEmpty) ' Catch ex As Exception ' ClassLogger.Add("ACHTUNG: Der Vorgang wurde abgeschlossen. Das Quellverzeichnis konnte jedoch nicht gelöscht werden, da sich in dem Ordner noch Dateien/Verzeichnisse befinden.", False) ' End Try 'End If Catch ex As Exception EventLog.WriteEntry("DDWMResultHandler", "Unexpected error in Thread_Completed: " & ex.ToString(), EventLogEntryType.Error) End Try End Sub Public Shared Function Thread_Abbrechen() Try If DDWDResultHandler.threadRunner.IsBusy Then DDWDResultHandler.threadRunner.CancelAsync() End If Return True Catch ex As Exception EventLog.WriteEntry("DDWMResultHandler", "Unexpected error in Thread_Abbrechen: " & ex.ToString(), EventLogEntryType.Error) clsLogger.AddError(ex.Message, "Thread_Abbrechen") Return False End Try End Function #End Region End Class