Semola73 Ответов: 1

Отключение служб Windows


Привет,

Я написал простой сервис, который подключается к серверу mysql.
В субрутине "OnStart" служба пытается подключиться к БД и запустить таймер.

моя проблема заключается в том, что при остановке ПК служба не останавливается, и субрутино "OnStart" не выполняется при следующем включении. Как я могу решить эту проблему? Я прилагаю код, написанный в сервисе.

Спасибо

Semola73

Что я уже пробовал:

Imports System.IO
Imports System.Timers
Public Class OutlookService

    Protected Overrides Sub OnStart(ByVal args() As String)
        ' Inserire qui il codice necessario per avviare il proprio servizio. Il metodo deve effettuare
        ' le impostazioni necessarie per il funzionamento del servizio.
        AddHandler Microsoft.Win32.SystemEvents.SessionEnded, AddressOf OnSessionEnded

        Dim swc_log As Boolean
        Dim ws_ini As New iniParser("C:\UsrPrograms\OutlookService\OutlookService.ini")
        swc_log = Boolean.Parse(ws_ini.getValue("GENERALE", "SWC_LOG"))
        ws_log = New Log(swc_log)

        ws_server = ws_ini.getValue("GENERALE", "SERVER")
        ws_username = ws_ini.getValue("GENERALE", "USER_NAME")
        ws_password = ws_ini.getValue("GENERALE", "USER_PWD")
        ws_database = ws_ini.getValue("GENERALE", "DATABASE")

        ws_OSQL = New OutlookSQL()
        If ws_OSQL.ConnectDb(ws_server, ws_username, ws_password, ws_database) Then

            ws_iniDb = New IniParserDB
            PathDocuments = ws_iniDb.getParam("GENERALE", "PATH_DOCUMENTS").getValore
            PathDropbox = ws_iniDb.getParam("GENERALE", "PATH_DROPBOX").getValore
            TempDir = ws_iniDb.getParam("GENERALE", "TEMP_DIR").getValore

            Try
                Boolean.TryParse(ws_iniDb.getParam("GENERALE", "DEBUG").getValore, swc_debug)
            Catch ex As Exception
                swc_debug = False
            End Try

            ws_timer = New Timer()
            AddHandler ws_timer.Elapsed, AddressOf OnTimedEvent
            ws_timer.Interval = CDbl(ws_iniDb.getParam("GENERALE", "INTERVAL").getValore) * 1000
            ws_timer.Enabled = True
        End If

    End Sub
    Private Sub OnSessionEnded()
        ws_log.ScriviLog("Windows Shutdown - Stop Service")
        Me.Stop()
    End Sub

    Protected Overrides Sub OnShutdown()
        Me.Stop()
    End Sub

    Protected Overrides Sub OnStop()
        ws_timer.Enabled = False

        ws_OSQL.Dispose()
        ws_OSQL = Nothing

        ws_log.Flush()
        ws_log.Dispose()
        ws_log = Nothing
    End Sub

    Private Sub OnTimedEvent()

        ws_log.ScriviLog("Try to analize files in: " & TempDir)
        For Each myFilename In Directory.GetFiles(TempDir)
            ws_log.ScriviLog("  Found file to elaborate: " & myFilename)
            Dim OutEng As New OutlookEngine(myFilename)
        Next

    End Sub

1 Ответов

Рейтинг:
0

Garth J Lancaster

Я не совсем уверен, что вы подразумеваете под "сервисом", но, судя по вашему коду, вы построили VB.Net Win32 Service - поэтому, когда вы просматриваете панель служб Windows или используете 'SC' для перечисления служб, а) Ваш есть и б) его тип установлен на 'Auto Start' или аналогичный .. да ?

(если он не настроен на автоматический запуск, а Im на Mac atm поэтому не может проверить точное значение, используйте сервисную панель и измените определение сервиса, чтобы изменить его тип запуска для автоматического запуска, перезагрузите компьютер и посмотрите, что произойдет)

Остальное, другие вещи, которые вам, возможно, придется сделать, есть/есть
а) проверьте журнал событий на наличие сообщений, которые могут показать, почему ваша служба не запускается должным образом
б) добавьте ведение журнала в OnStart, чтобы вы могли проследить его и увидеть, где могут возникнуть какие - либо трудности - отладка службы без ведения журнала трудна, как я думаю, вы знаете-я привык использовать C# и "TopShelf", чтобы я мог протестировать внутреннюю работу службы как приложение командной строки перед установкой в качестве службы