You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
329 lines
12 KiB
329 lines
12 KiB
Imports System.ServiceProcess
|
|
Imports System.Threading
|
|
Imports System.IO
|
|
Imports System.Reflection
|
|
Imports System.IO.File
|
|
Imports System.Data
|
|
Imports System.Data.SqlClient
|
|
Imports System.Data.SqlTypes
|
|
|
|
|
|
Public Class Service1
|
|
Inherits System.ServiceProcess.ServiceBase
|
|
|
|
#Region " Vom Component Designer generierter Code "
|
|
|
|
Public Sub New()
|
|
MyBase.New()
|
|
|
|
' Dieser Aufruf wird vom Komponenten-Designer benötigt.
|
|
InitializeComponent()
|
|
|
|
' Fügen Sie Initialisierungscode hinter dem InitializeComponent()-Aufruf ein
|
|
|
|
End Sub
|
|
|
|
'UserService überschreibt den Löschvorgang zum Bereinigen der Komponentenliste.
|
|
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
|
|
If disposing Then
|
|
If Not (components Is Nothing) Then
|
|
components.Dispose()
|
|
End If
|
|
End If
|
|
MyBase.Dispose(disposing)
|
|
End Sub
|
|
|
|
' Der Haupteinstiegspunkt für den Vorgang
|
|
<MTAThread()> _
|
|
Shared Sub Main()
|
|
|
|
|
|
'#If DEBUG Then
|
|
' Dim service As New Service1
|
|
' service.StartService()
|
|
' System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite)
|
|
'#Else
|
|
' Dim ServicesToRun() As System.ServiceProcess.ServiceBase
|
|
' ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1}
|
|
' System.ServiceProcess.ServiceBase.Run(ServicesToRun)
|
|
'#End If
|
|
Dim ServicesToRun() As System.ServiceProcess.ServiceBase
|
|
ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1}
|
|
System.ServiceProcess.ServiceBase.Run(ServicesToRun)
|
|
End Sub
|
|
|
|
|
|
|
|
' Für Komponenten-Designer erforderlich
|
|
Private components As System.ComponentModel.IContainer
|
|
|
|
' HINWEIS: Die folgende Prozedur wird vom Komponenten-Designer benötigt.
|
|
' Sie kann mit dem Komponenten-Designer modifiziert werden. Verwenden Sie nicht
|
|
' den Code-Editor zur Bearbeitung.
|
|
Friend WithEvents chktimer As System.Timers.Timer
|
|
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
|
|
Me.chktimer = New System.Timers.Timer
|
|
CType(Me.chktimer, System.ComponentModel.ISupportInitialize).BeginInit()
|
|
'
|
|
'chktimer
|
|
'
|
|
Me.chktimer.Enabled = True
|
|
'
|
|
'Service1
|
|
'
|
|
Me.ServiceName = "EDKB01ZV"
|
|
CType(Me.chktimer, System.ComponentModel.ISupportInitialize).EndInit()
|
|
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
#Region "Deklarationen"
|
|
Dim FileWatch As New FileSystemWatcher()
|
|
Public m_Log As bms.Logging
|
|
|
|
Public Enum ENUM_InfoTyp
|
|
Typ_Information = 1
|
|
Typ_Error = 3
|
|
Typ_Warning = 2
|
|
End Enum
|
|
|
|
Public Enum ENUM_LogTyp
|
|
Eventlog = 1
|
|
Journal = 2
|
|
Beide = 3
|
|
End Enum
|
|
|
|
Public Enum ENUM_LogStatus
|
|
<CLSCompliant(False)> _New = 1
|
|
<CLSCompliant(False)> _Close = 2
|
|
<CLSCompliant(False)> _Restart = 3
|
|
End Enum
|
|
#End Region
|
|
|
|
Protected Overrides Sub OnStart(ByVal args() As String)
|
|
Dim db As New EDOKA.DB_Connection()
|
|
'Filewatcher initialisieren
|
|
Thread.Sleep(3000)
|
|
Try
|
|
LogInstanz(ENUM_LogStatus._New)
|
|
Catch ex As Exception
|
|
WirteLog("BMS-Connection / XML: " + ex.Message, ApplicationPath() + "Error.txt")
|
|
Exit Sub
|
|
End Try
|
|
|
|
|
|
Params.Loadparameters()
|
|
PrintLog("EDKB01ZV gestartet", ENUM_LogTyp.Beide, ENUM_InfoTyp.Typ_Information)
|
|
Me.chktimer.Interval = Params.TimerIntervall
|
|
Me.chktimer.Enabled = True
|
|
PrintLog("Timer Initialisiert", ENUM_LogTyp.Beide, ENUM_InfoTyp.Typ_Information)
|
|
Try
|
|
FileWatch.Path = Params.WatchDirectory
|
|
FileWatch.IncludeSubdirectories = False
|
|
FileWatch.Filter = "zv*.txt"
|
|
AddHandler FileWatch.Created, New FileSystemEventHandler(AddressOf OnFileEvent)
|
|
Me.FileWatch.EnableRaisingEvents = True
|
|
PrintLog("Überwachung gestartet...", ENUM_LogTyp.Beide, ENUM_InfoTyp.Typ_Information)
|
|
Catch ex As Exception
|
|
PrintLog("Fehler bei der Initialisierung des Filewacherobjekts auf " + Params.WatchDirectory, ENUM_LogTyp.Beide, ENUM_InfoTyp.Typ_Error)
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub WirteLog(ByVal stext As String, ByVal sPfad As String)
|
|
Try
|
|
Dim FiStr As FileStream = New FileStream(sPfad, FileMode.Append)
|
|
Dim StrWr As StreamWriter = New StreamWriter(FiStr)
|
|
StrWr.WriteLine("Fehler: " + Now())
|
|
StrWr.WriteLine("Fehlertext:" + stext)
|
|
StrWr.Close()
|
|
Catch ex As Exception
|
|
End Try
|
|
End Sub
|
|
|
|
Public Function ApplicationPath() As String
|
|
'Return Path.GetDirectoryName([Assembly].GetExecutingAssembly().Location)
|
|
Return Path.GetDirectoryName([Assembly].GetEntryAssembly().Location) + "\"
|
|
End Function
|
|
|
|
Private Sub LogInstanz(ByVal Typ As ENUM_LogStatus)
|
|
Select Case Typ
|
|
Case ENUM_LogStatus._New
|
|
m_Log = New bms.Logging(CInt(2), Common.Common.JobType.WatchJob)
|
|
m_Log.Start()
|
|
Case ENUM_LogStatus._Close
|
|
m_Log.Ende()
|
|
m_Log = Nothing
|
|
Case ENUM_LogStatus._Restart
|
|
m_Log.Ende()
|
|
m_Log = Nothing
|
|
m_Log = New bms.Logging(CInt(2), Common.Common.JobType.WatchJob)
|
|
m_Log.Start()
|
|
PrintLog("Überwachung gestartet...", ENUM_LogTyp.Beide, ENUM_InfoTyp.Typ_Information)
|
|
End Select
|
|
End Sub
|
|
|
|
'Private Sub StartService()
|
|
' Dim db As New EDOKA.DB_Connection
|
|
' 'Filewatcher initialisieren
|
|
|
|
' m_Log = New bms.Logging(CInt(2), Common.Common.JobType.StartJob)
|
|
' m_Log.Start()
|
|
|
|
' Params.Loadparameters()
|
|
' PrintLog("EDKB01ZV gestartet", ENUM_LogTyp.Beide, ENUM_InfoTyp.Typ_Information)
|
|
' Me.chktimer.Interval = Params.TimerIntervall
|
|
' Me.chktimer.Enabled = True
|
|
' PrintLog("Timer Initialisiert", ENUM_LogTyp.Beide, ENUM_InfoTyp.Typ_Information)
|
|
' Try
|
|
' FileWatch.Path = Params.WatchDirectory
|
|
' FileWatch.IncludeSubdirectories = False
|
|
' FileWatch.Filter = "zv*.txt"
|
|
' AddHandler FileWatch.Created, New FileSystemEventHandler(AddressOf OnFileEvent)
|
|
' Me.FileWatch.EnableRaisingEvents = True
|
|
' PrintLog("Überwachung gestartet...", ENUM_LogTyp.Beide, ENUM_InfoTyp.Typ_Information)
|
|
' Catch ex As Exception
|
|
' PrintLog("Fehler bei der Initialisierung des Filewacherobjekts auf " + Params.WatchDirectory, ENUM_LogTyp.Beide, ENUM_InfoTyp.Typ_Error)
|
|
' End Try
|
|
'End Sub
|
|
|
|
Private Sub OnFileEvent(ByVal source As Object, ByVal e As FileSystemEventArgs)
|
|
Try
|
|
|
|
Me.chktimer.Enabled = False
|
|
PrintLog("Datei zvdaten.txt wird angeliefert - " + LTrim(Str(Params.Wait_Before_Start_EDKB01 / 60 / 1000)) + " Minuten warten", ENUM_LogTyp.Beide, ENUM_InfoTyp.Typ_Information)
|
|
Thread.Sleep(Params.Wait_Before_Start_EDKB01)
|
|
|
|
Dim di As New IO.DirectoryInfo(Params.WatchDirectory)
|
|
Dim diar1 As IO.FileInfo() = di.GetFiles("zvi*.txt")
|
|
Dim diar2 As IO.FileInfo() = di.GetFiles("zvc*.txt")
|
|
Dim dra As IO.FileInfo
|
|
|
|
'zvindex.txt File einlesen
|
|
|
|
For Each dra In diar1
|
|
File.Copy(e.FullPath, Params.SaveDir + Format(Now, "yyyyMMddHHmmss") + "_" + e.Name)
|
|
PrintLog("Datei " + e.FullPath + " gesichert", ENUM_LogTyp.Beide, ENUM_InfoTyp.Typ_Information)
|
|
If e.FullPath = "D:\EDOKA\EDKB01\zvIndex.txt" Then
|
|
Dim i As Integer
|
|
i = Shell(Globals.ApplicationPath + Params.ParamsEDKB01, AppWinStyle.NormalFocus, True)
|
|
File.Copy(Params.WatchDirectory + "HostIndex.ok", Params.SaveDir + Format(Now, "yyyyMMddHHmmss") + "_HostIndex.ok")
|
|
If Now.Hour > 8 Then
|
|
File.Delete(Params.WatchDirectory + "HostIndex.ok")
|
|
PrintLog("Datei " + Params.WatchDirectory + "HostIndex.ok gelöscht", ENUM_LogTyp.Beide, ENUM_InfoTyp.Typ_Information)
|
|
End If
|
|
Sendmail(Params.MailAdresseOK, 0)
|
|
LogInstanz(ENUM_LogStatus._Restart)
|
|
End If
|
|
If e.FullPath = "D:\EDOKA\EDKB01\zvcheckIndex.txt" Then
|
|
File.Delete(Params.WatchDirectory + "zvcheckIndex.txt")
|
|
End If
|
|
Me.chktimer.Enabled = True
|
|
Next
|
|
|
|
Catch ex As Exception
|
|
PrintLog("Fehler: " + ex.Message, ENUM_LogTyp.Beide, ENUM_InfoTyp.Typ_Error)
|
|
End Try
|
|
End Sub
|
|
|
|
|
|
Protected Overrides Sub OnStop()
|
|
' Hier Code zum Ausführen notwendiger Löschvorgänge zum Anhalten des Dienstes einfügen.
|
|
Me.FileWatch.EnableRaisingEvents = False
|
|
Me.chktimer.Enabled = False
|
|
PrintLog("Service gestoppt", ENUM_LogTyp.Beide, ENUM_InfoTyp.Typ_Information)
|
|
LogInstanz(ENUM_LogStatus._Close)
|
|
End Sub
|
|
|
|
#Region "Utils"
|
|
|
|
'Dim EVLog As New EventLog("EDKB01ZV")
|
|
|
|
'Public Sub PrintLog(ByVal message As String, Optional ByVal eventmessage As EventLogEntryType = EventLogEntryType.Information)
|
|
' Try
|
|
' If Not EVLog.SourceExists("EDKB01ZV") Then
|
|
' EVLog.CreateEventSource("EDKB01ZV", "EDKB01ZV")
|
|
' End If
|
|
' EVLog.Source = "EDKB01ZV"
|
|
' EVLog.WriteEntry(EVLog.Source, message, eventmessage)
|
|
' Catch ex As Exception
|
|
' End Try
|
|
'End Sub
|
|
|
|
Public Sub PrintLog(ByVal message As String, ByVal sTyp As ENUM_LogTyp, ByVal eventmessage As ENUM_InfoTyp)
|
|
If sTyp = ENUM_LogTyp.Journal Or sTyp = ENUM_LogTyp.Beide Then
|
|
Try
|
|
m_Log.Log(message, eventmessage)
|
|
Catch ex As Exception
|
|
End Try
|
|
End If
|
|
If sTyp = ENUM_LogTyp.Eventlog Or sTyp = ENUM_LogTyp.Beide Then
|
|
Dim iError As EventLogEntryType
|
|
Select Case eventmessage
|
|
Case ENUM_InfoTyp.Typ_Warning
|
|
iError = EventLogEntryType.Warning
|
|
Case ENUM_InfoTyp.Typ_Error
|
|
iError = EventLogEntryType.Error
|
|
Case Else
|
|
iError = EventLogEntryType.Information
|
|
End Select
|
|
Try
|
|
Dim eventl As New EventLog
|
|
If Diagnostics.EventLog.SourceExists("EDKB01ZV") = False Then
|
|
Diagnostics.EventLog.CreateEventSource("EDKB01ZV", "EDKB01ZV")
|
|
End If
|
|
eventl.BeginInit()
|
|
Diagnostics.EventLog.WriteEntry("EDKB01ZV", message, iError)
|
|
eventl.EndInit()
|
|
|
|
Catch ex As Exception
|
|
End Try
|
|
End If
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
Private Sub chktimer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles chktimer.Elapsed
|
|
If e.SignalTime.Hour > 9 And e.SignalTime.Hour < 19 Then
|
|
CheckErrorDoks()
|
|
m_Log.Log("Innerhalb der letzten " + LTrim(Str(Params.TimerIntervall / 60 / 1000)) + " Minuten wurden keine ZV-Daten angeliefert / " + Format(Now, "yyyyMMddHHmmss"), Common.Common.JournalEntryType.Error)
|
|
LogInstanz(ENUM_LogStatus._Restart)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub CheckErrorDoks()
|
|
Try
|
|
Dim di As New IO.DirectoryInfo(Params.WatchDirectory)
|
|
Dim diar1 As IO.FileInfo() = di.GetFiles("zv*.txt")
|
|
Dim dra As IO.FileInfo
|
|
For Each dra In diar1
|
|
File.Move(Params.WatchDirectory + dra.Name, Params.SaveDirError + Format(Now, "yyyyMMddHHmmss") + "_" + dra.Name)
|
|
PrintLog("Datei " + Params.WatchDirectory + dra.Name + " gesichert", ENUM_LogTyp.Beide, ENUM_InfoTyp.Typ_Error)
|
|
Next
|
|
Catch ex As Exception
|
|
|
|
End Try
|
|
End Sub
|
|
|
|
Public Function Sendmail(ByVal email As String, ByVal msg As Integer) As Boolean
|
|
Dim m_Common As New Common.Common
|
|
Dim meldung As String = ""
|
|
Dim betreff As String = ""
|
|
|
|
Select Case msg
|
|
Case 0
|
|
betreff = "EDKB01ZV - Return 0: EDKB01ZV Erfolgreich beendet / " + Format(Now, "yyyyMMddHHmmss")
|
|
meldung = "EDKB01ZV - Return 0: EDKB01ZV Erfolgreich beendet."
|
|
End Select
|
|
Try
|
|
m_Common.SendMail(email, betreff, meldung)
|
|
Sendmail = True
|
|
Catch ex As Exception
|
|
Sendmail = False
|
|
PrintLog("Fehler: " + ex.Message, ENUM_LogTyp.Beide, ENUM_InfoTyp.Typ_Error)
|
|
End Try
|
|
|
|
End Function
|
|
|
|
End Class
|