From f2292bc92e54f583f1687fc961c1432da343c665 Mon Sep 17 00:00:00 2001 From: Digital Data - Marlon Schreiber Date: Wed, 22 Aug 2018 16:26:01 +0200 Subject: [PATCH] MS Service --- DDTestService/DDTestService.vbproj | 12 +- DDTestService/MyNewService.vb | 83 +++++++++++-- DDTestService/ProjectInstaller.Designer.vb | 46 ++++++++ DDTestService/ProjectInstaller.resx | 129 +++++++++++++++++++++ DDTestService/ProjectInstaller.vb | 16 +++ 5 files changed, 273 insertions(+), 13 deletions(-) create mode 100644 DDTestService/ProjectInstaller.Designer.vb create mode 100644 DDTestService/ProjectInstaller.resx create mode 100644 DDTestService/ProjectInstaller.vb diff --git a/DDTestService/DDTestService.vbproj b/DDTestService/DDTestService.vbproj index a5f86aaa..df8a9034 100644 --- a/DDTestService/DDTestService.vbproj +++ b/DDTestService/DDTestService.vbproj @@ -6,7 +6,7 @@ AnyCPU {63B0EAA3-8BF5-46DA-9040-15E781F4C3B1} WinExe - DDTestService.Service1 + DDTestService.MyNewService DDTestService DDTestService 512 @@ -56,6 +56,7 @@ + @@ -102,6 +103,12 @@ Settings.settings True + + ProjectInstaller.vb + + + Component + @@ -113,6 +120,9 @@ MyNewService.vb + + ProjectInstaller.vb + diff --git a/DDTestService/MyNewService.vb b/DDTestService/MyNewService.vb index efeb3043..ac45f0c2 100644 --- a/DDTestService/MyNewService.vb +++ b/DDTestService/MyNewService.vb @@ -2,35 +2,94 @@ Imports DigitalData.Modules.Logging Imports NLog Public Class MyNewService - Private Shared _MyLoggerConfig As LogConfig - Public Shared threadRunner As BackgroundWorker - Private Shared Logger As Logger = LogManager.GetCurrentClassLogger + Private Shared _MyLoggerConfig1 As LogConfig + Private Shared _MyLoggerConfig2 As LogConfig + Public Shared threadRunner1 As BackgroundWorker + Private Shared Logger1 As Logger '= LogManager.GetCurrentClassLogger + Private Shared Logger2 As Logger '= LogManager.GetCurrentClassLogger Private eventId As Integer = 1 Protected Overrides Sub OnStart(ByVal args() As String) + + + + ' '#Thread für Durchlauf generieren + threadRunner1 = New BackgroundWorker() + threadRunner1.WorkerReportsProgress = True + threadRunner1.WorkerSupportsCancellation = True + AddHandler threadRunner1.DoWork, AddressOf RUN_THREAD + AddHandler threadRunner1.RunWorkerCompleted, AddressOf Thread_Completed + + ' '### Den Timer generieren + Dim Timer1 As New System.Timers.Timer() + 'Das Event hinterlegen welches bei "Tick" ausgelöst wird + AddHandler Timer1.Elapsed, AddressOf Thread1_Run + ' Set the Interval + Timer1.Interval = 60000 + 'ClassLogger.Add("Timer - Intervall: " & clsSQLITE.konf_intervall & " Minuten", False) + Timer1.Enabled = True + Logger1.Info("Timer gestartet") + ' Und den Durchlauf das erste Mal starten + threadRunner1.RunWorkerAsync() + ' Code zum Starten des Dienstes hier einfügen. Diese Methode sollte Vorgänge ' ausführen, damit der Dienst gestartet werden kann. - _MyLoggerConfig = New LogConfig(LogConfig.PathType.CurrentDirectory) + ' _MyLoggerConfig1 = New LogConfig(LogConfig.PathType.CurrentDirectory, Nothing, "Timer1") + _MyLoggerConfig2 = New LogConfig(LogConfig.PathType.CurrentDirectory, Nothing, "Timer2") + ' clsLogger.Init(My.Application.Info.DirectoryPath & "\Log", "_SERVICEResultHandler") - Logger.Info("Service started") + Logger1.Info("Service started") + Logger2.Info("Service started") ' Set up a timer to trigger every minute. Dim timer As System.Timers.Timer = New System.Timers.Timer() - timer.Interval = 60000 ' 60 seconds - AddHandler timer.Elapsed, AddressOf Me.OnTimer + timer.Interval = 30000 ' 30 seconds + AddHandler timer.Elapsed, AddressOf Me.OnTimer1 timer.Start() + End Sub - Private Sub OnTimer(sender As Object, e As Timers.ElapsedEventArgs) + Private Sub RUN_THREAD() + _MyLoggerConfig1 = New LogConfig(LogConfig.PathType.CurrentDirectory, Nothing, "TimerXYZ") + Logger1 = LogManager.GetCurrentClassLogger ' TODO: Insert monitoring activities here. - Logger.Info("Monitoring the System - eventId: " & eventId) + Logger1.Info("RUN_THREAD - Monitoring the System - eventId: " & eventId) + End Sub + Public Shared Sub Thread1_Run() + If Not threadRunner1.IsBusy Then + threadRunner1.RunWorkerAsync() + End If + End Sub + 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 + Logger1.Warn("Der Process wurde durch den Anwender abgebrochen") + ElseIf e.Error IsNot Nothing Then + Logger1.Warn("Fehler bei Durchlauf. Der Vorgang wird abgebrochen: " & e.Error.Message) + End If + + Catch ex As Exception + EventLog.WriteEntry("DDWMResultHandler", "Unexpected error in Thread_Completed: " & ex.ToString(), EventLogEntryType.Error) + End Try + End Sub + Private Sub OnTimer1(sender As Object, e As Timers.ElapsedEventArgs) + _MyLoggerConfig2 = New LogConfig(LogConfig.PathType.CurrentDirectory, Nothing, "Timer1") + Logger2 = LogManager.GetCurrentClassLogger + ' TODO: Insert monitoring activities here. + Logger2.Info("OnTimer1 - Monitoring the System - eventId: " & eventId) eventId = eventId + 1 End Sub + Protected Overrides Sub OnStop() ' Hier Code zum Ausführen erforderlicher Löschvorgänge zum Beenden des Dienstes einfügen. - Logger.Info("Service stopped") + Logger1.Info("Service stopped") + Logger2.Info("Service stopped") End Sub Protected Overrides Sub OnPause() - Logger.Info("In OnPause...") + Logger1.Info("In OnPause...") + Logger2.Info("In OnPause...") End Sub Protected Overrides Sub OnContinue() - Logger.Info("In OnContinue...") + Logger1.Info("In OnContinue...") + Logger2.Info("In OnContinue...") End Sub End Class diff --git a/DDTestService/ProjectInstaller.Designer.vb b/DDTestService/ProjectInstaller.Designer.vb new file mode 100644 index 00000000..86fb8200 --- /dev/null +++ b/DDTestService/ProjectInstaller.Designer.vb @@ -0,0 +1,46 @@ + Partial Class ProjectInstaller + Inherits System.Configuration.Install.Installer + + 'Installer überschreibt den Löschvorgang zum Bereinigen der Komponentenliste. + _ + 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 + + 'Wird vom Komponenten-Designer benötigt. + Private components As System.ComponentModel.IContainer + + 'Hinweis: Die folgende Prozedur ist für den Komponenten-Designer erforderlich. + 'Das Bearbeiten ist mit dem Komponenten-Designer möglich. + 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. + _ + Private Sub InitializeComponent() + Me.ServiceProcessInstaller1 = New System.ServiceProcess.ServiceProcessInstaller() + Me.ServiceInstaller1 = New System.ServiceProcess.ServiceInstaller() + ' + 'ServiceProcessInstaller1 + ' + Me.ServiceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalService + Me.ServiceProcessInstaller1.Password = Nothing + Me.ServiceProcessInstaller1.Username = Nothing + ' + 'ServiceInstaller1 + ' + Me.ServiceInstaller1.Description = "TestService für testzwecke" + Me.ServiceInstaller1.ServiceName = "MyNewService" + ' + 'ProjectInstaller + ' + Me.Installers.AddRange(New System.Configuration.Install.Installer() {Me.ServiceProcessInstaller1, Me.ServiceInstaller1}) + + End Sub + + Friend WithEvents ServiceProcessInstaller1 As ServiceProcess.ServiceProcessInstaller + Friend WithEvents ServiceInstaller1 As ServiceProcess.ServiceInstaller +End Class diff --git a/DDTestService/ProjectInstaller.resx b/DDTestService/ProjectInstaller.resx new file mode 100644 index 00000000..323abb16 --- /dev/null +++ b/DDTestService/ProjectInstaller.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 197, 17 + + + False + + \ No newline at end of file diff --git a/DDTestService/ProjectInstaller.vb b/DDTestService/ProjectInstaller.vb new file mode 100644 index 00000000..733dfc0c --- /dev/null +++ b/DDTestService/ProjectInstaller.vb @@ -0,0 +1,16 @@ +Imports System.ComponentModel +Imports System.Configuration.Install + +Public Class ProjectInstaller + + Public Sub New() + MyBase.New() + + 'Dieser Aufruf ist für den Komponenten-Designer erforderlich. + InitializeComponent() + + 'Initialisierungscode nach dem Aufruf von InitializeComponent hinzufügen + + End Sub + +End Class