none
Windows-Dienst arbeitet Programm nicht ab RRS feed

  • Frage

  • Hallo,

    ich habe folgenden Code um zu überprüfen ob ein Task läuft und wenn nicht, soll der PC heruntergefahren werden.

    Ich kann eine "service.exe" erstellen und Diese mit sc als Dienst installieren. Abgearbeitet wird allerdings nichts.Als normale Anwendung läuft der Code wunderbar.

    Gruß
    Armin

    Public Class Service1
        Protected Overrides Sub OnStart(ByVal args() As String)
            Timer1.Start()
        End Sub
        Protected Overrides Sub OnStop()
        End Sub
        Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim i As Integer
            i = 0
            For Each p As Process In Process.GetProcesses
                If p.ProcessName = "notepad" Then
                    i = 1
                End If
            Next
            If i = 0 Then
                Shell("shutdown /f /p")
            End If
        End Sub
    End Class

    Mittwoch, 23. Mai 2012 13:05

Antworten

  • Hallo Armin,

    ein häufiges Problem beim Wechsel von einer Anwendung zu einem Dienst ist, das der Windows Forms Timer dort nicht funktioniert, siehe dazu:

    Comparing the Timer Classes in the .NET Framework Class Library

    Gruß Elmar


    Mittwoch, 23. Mai 2012 14:08
    Beantworter
  • Hallo,

    ich wollte noch kurz meine Lösung mitteilen und mich für die Mithilfe bedanken:

    Imports System
    Imports WindowsService1

    Public Class Service1

        Protected Overrides Sub OnStart(ByVal args() As String)
            Dim Timer1 As New System.Timers.Timer
            AddHandler Timer1.Elapsed, AddressOf lesen

            Timer1.Interval = 60000
            Timer1.Enabled = True
            Timer1.AutoReset = True
            Timer1.Start()
        End Sub

        Protected Overrides Sub OnStop()

        End Sub


        Private Sub lesen(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim i As Integer
            i = 0
            For Each p As Process In Process.GetProcesses
                If p.ProcessName = "notepad" Then
                    i = 1
                End If
            Next

            If i = 0 Then
                Shell("shutdown /f /p")
            End If
       End Sub

    Gruß

    Armin

    Mittwoch, 4. Juli 2012 09:11

Alle Antworten

  • Hallo Armin,

    ein häufiges Problem beim Wechsel von einer Anwendung zu einem Dienst ist, das der Windows Forms Timer dort nicht funktioniert, siehe dazu:

    Comparing the Timer Classes in the .NET Framework Class Library

    Gruß Elmar


    Mittwoch, 23. Mai 2012 14:08
    Beantworter
  • Hallo Elmar,

    irgendwie bekomm ich den Timer nicht so in den Griff. Die Anleitung hab ich versucht nachzustellen.

    Danke für Deine Antwort

    Gruß

    Armin

    Donnerstag, 24. Mai 2012 13:27
  • Hallo Armin,

    für einen Service eignet sich ein System.Timers.Timer.
    Me.Timer1 = New System.Timers.Timer()
    Der hat statt des Ticks ein Elapsed Event.

    Donnerstag, 24. Mai 2012 18:29
  • Hallo,

    vielen Dank für Eure Hilfe, bin auch teilweise schon am probieren nur leider hab ich gerade andere Aufgaben.

    Melde mich sobald es weiter geht.

    Gruß

    Armin

    Mittwoch, 30. Mai 2012 05:43
  • Hallo,

    vielen Dank für Eure Hilfe, bin auch teilweise schon am probieren nur leider hab ich gerade andere Aufgaben.

    Melde mich sobald es weiter geht.

    Gruß

    Armin


    ****************************************************************************************************************
    Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.
    Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
    ****************************************************************************************************************

    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 29. Juni 2012 07:41
    Moderator
  • Hallo,

    ich wollte noch kurz meine Lösung mitteilen und mich für die Mithilfe bedanken:

    Imports System
    Imports WindowsService1

    Public Class Service1

        Protected Overrides Sub OnStart(ByVal args() As String)
            Dim Timer1 As New System.Timers.Timer
            AddHandler Timer1.Elapsed, AddressOf lesen

            Timer1.Interval = 60000
            Timer1.Enabled = True
            Timer1.AutoReset = True
            Timer1.Start()
        End Sub

        Protected Overrides Sub OnStop()

        End Sub


        Private Sub lesen(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim i As Integer
            i = 0
            For Each p As Process In Process.GetProcesses
                If p.ProcessName = "notepad" Then
                    i = 1
                End If
            Next

            If i = 0 Then
                Shell("shutdown /f /p")
            End If
       End Sub

    Gruß

    Armin

    Mittwoch, 4. Juli 2012 09:11