Служба Windows запущена, а затем остановлена, пока я не обнаружил никакой ошибки в кодах

#vb.net

#vb.net

Вопрос:

Я создал службу с именем «IranStockCodal» и «Успешно» собрал и установил ее в службах Windows, но когда я запускаю ее, в окне служб Windows появляется предупреждение: «Служба «IranStockCodal» на локальном компьютере запущена, а затем остановлена. Некоторые службы автоматически останавливаются, если они не используются другими службами или программами «. Задача «Вызвать vbIranStock.Вызываемый VBNetLib.vbScript4.VbsRun4 (False) «действительно работает в консольном приложении, но когда я импортирую и вызываю его из службы, это не так. пожалуйста, помогите мне, что нужно сделать, чтобы решить эту проблему.

 Imports System.IO
Imports System.Threading
Imports System.Configuration
Imports vbIranStock.VBNetLib.vbScript4
Imports vbIranStock

Public Class Service1

    Protected Overrides Sub OnStart(ByVal args() As String)
        Me.WriteToFile("Iran Stock Codal started at "   DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt"))
        Call vbIranStock.VBNetLib.vbScript4.VbsRun4(False)
        Me.WriteToFile("Iran Stock Codal Task Called at "   DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt"))
        Me.ScheduleService()

    End Sub

    Protected Overrides Sub OnStop()
            Me.WriteToFile("Iran Stock Codal Service stopped at "   DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt"))
            Me.Schedular.Dispose()
        End Sub

        Private Schedular As Timer

        Public Sub ScheduleService()
            Try
                Schedular = New Timer(New TimerCallback(AddressOf SchedularCallback))
                Dim mode As String = ConfigurationManager.AppSettings("Mode").ToUpper()
                Me.WriteToFile((Convert.ToString("Iran Stock Codal Service Mode: ") amp; mode)   " {0}")

                'Set the Default Time.
                Dim scheduledTime As DateTime = DateTime.MinValue

                If mode.ToUpper() = "DAILY" Then
                    'Get the Scheduled Time from AppSettings.
                    scheduledTime = DateTime.Parse(System.Configuration.ConfigurationManager.AppSettings("ScheduledTime"))
                    If DateTime.Now > scheduledTime Then
                        'If Scheduled Time is passed set Schedule for the next day.
                        scheduledTime = scheduledTime.AddDays(1)
                    End If
                End If

                If mode.ToUpper() = "INTERVAL" Then
                    'Get the Interval in Minutes from AppSettings.
                    Dim intervalMinutes As Integer = Convert.ToInt32(ConfigurationManager.AppSettings("IntervalMinutes"))

                    'Set the Scheduled Time by adding the Interval to Current Time.
                    scheduledTime = DateTime.Now.AddMinutes(intervalMinutes)
                    If DateTime.Now > scheduledTime Then
                        'If Scheduled Time is passed set Schedule for the next Interval.
                        scheduledTime = scheduledTime.AddMinutes(intervalMinutes)
                    End If
                End If

                Dim timeSpan As TimeSpan = scheduledTime.Subtract(DateTime.Now)
                Dim schedule As String = String.Format("{0} day(s) {1} hour(s) {2} minute(s) {3} seconds(s)", timeSpan.Days, timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds)

                Me.WriteToFile((Convert.ToString("Iran Stock Codal Service scheduled to run after: ") amp; schedule)   " {0}")

                'Get the difference in Minutes between the Scheduled and Current Time.
                Dim dueTime As Integer = Convert.ToInt32(timeSpan.TotalMilliseconds)

                'Change the Timer's Due Time.
                Schedular.Change(dueTime, Timeout.Infinite)
            Catch ex As Exception
                WriteToFile("Iran Stock Codal Service Error on: {0} "   ex.Message   ex.StackTrace)

                'Stop the Windows Service.
                Using serviceController As New System.ServiceProcess.ServiceController("IranStockCodal")
                    serviceController.[Stop]()
                End Using
            End Try
        End Sub

        Private Sub SchedularCallback(e As Object)
            Me.WriteToFile("Iran Stock Codal Service Log: "   DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt"))
            Me.ScheduleService()
        End Sub

        Private Sub WriteToFile(text As String)
            Dim path As String = "C:ServiceLog.txt"
            Using writer As New StreamWriter(path, True)
                writer.WriteLine(String.Format(text, DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt")))
                writer.Close()
            End Using
        End Sub
    End Class
  

Вот установленные проектом коды:

     Imports System.ComponentModel
Imports System.Configuration.Install

Public Class ProjectInstaller

    Public Sub New()
        MyBase.New()

        'This call is required by the Component Designer.
        InitializeComponent()

        'Add initialization code after the call to InitializeComponent

    End Sub
    Protected Overrides Sub OnAfterInstall(savedState As IDictionary)
        MyBase.OnAfterInstall(savedState)

        'The following code starts the services after it is installed.
        Using serviceController As New System.ServiceProcess.ServiceController(ServiceInstaller1.ServiceName)
            serviceController.Start()
        End Using
    End Sub

    Private Sub ServiceInstaller1_AfterInstall(sender As Object, e As InstallEventArgs) Handles ServiceInstaller1.AfterInstall

    End Sub

    Private Sub ServiceProcessInstaller1_AfterInstall(sender As Object, e As InstallEventArgs) Handles ServiceProcessInstaller1.AfterInstall

    End Sub
End Class
  

Вот коды ComponentModel

     <System.ComponentModel.RunInstaller(True)> Partial Class ProjectInstaller
    Inherits System.Configuration.Install.Installer

    'Installer overrides dispose to clean up the component list.
    <System.Diagnostics.DebuggerNonUserCode()> _
    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

    'Required by the Component Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Component Designer
    'It can be modified using the Component Designer.  
    'Do not modify it using the code editor.
    <System.Diagnostics.DebuggerStepThrough()>
    Private Sub InitializeComponent()
        Me.ServiceProcessInstaller1 = New System.ServiceProcess.ServiceProcessInstaller()
        Me.ServiceInstaller1 = New System.ServiceProcess.ServiceInstaller()
        '
        'ServiceProcessInstaller1
        '
        Me.ServiceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem

        '
        'ServiceInstaller1
        '
        Me.ServiceInstaller1.ServiceName = "IranStockCodal"
        Me.ServiceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic
        '
        'ProjectInstaller
        '
        Me.Installers.AddRange(New System.Configuration.Install.Installer() {Me.ServiceProcessInstaller1, Me.ServiceInstaller1})

    End Sub
    Friend WithEvents ServiceProcessInstaller1 As System.ServiceProcess.ServiceProcessInstaller
    Friend WithEvents ServiceInstaller1 As System.ServiceProcess.ServiceInstaller

End Class
  

Комментарии:

1. Обычно, когда я вижу такое поведение, это связано с тем, что служба выходит из строя при запуске, поскольку вы можете запустить ее как консольное приложение, вероятным виновником, вероятно, являются разрешения. Является ли «C:ServiceLog.txt «файл создается, и запуск даже регистрируется?

2. @Hursey Когда я удаляю и устанавливаю службу или запускаю ее вручную, записывается новое время запуска журнала. но она не продолжает запускать «VbsRun4».

3. Значит, она не записывает никаких ошибок в ваш файл журнала?

4. @Hursey Нет, это не так. Вывод только такой: «Иранский биржевой код запущен в 25.08.2010 01: 10: 48 вечера»

5. Несколько вещей, которые нужно попробовать. Можете ли вы подключить отладчик к службе, возможно, это прольет некоторый свет на проблему. Следующее, попробуйте изменить пользователя, которого запускает служба, на что-то с большими правами