vb.net, как запустить службу мониторинга папок во время выполнения и передать путь к папке для мониторинга? - PullRequest
1 голос
/ 28 мая 2010

У меня есть следующий файл службы Windows:

Imports System.ServiceProcess
Imports System.IO


Public Class fswService
Dim fsw As FileSystemWatcher
Dim lf As StreamWriter

Protected Overrides Sub OnStart(ByVal args As String())
    ' Add code here to start your service. This method should set things
    ' in motion so your service can do its work.
    lf = New StreamWriter(Application.StartupPath & "\fsw_lg.log")
    fsw = New FileSystemWatcher()

    fsw.Path = args(0)
    fsw.IncludeSubdirectories = True
    fsw.Filter = ".txt"
    fsw.EnableRaisingEvents = True

    AddHandler fsw.Created, New FileSystemEventHandler(AddressOf file_created)
    AddHandler fsw.Changed, New FileSystemEventHandler(AddressOf file_changed)
    AddHandler fsw.Deleted, New FileSystemEventHandler(AddressOf file_deleted)
End Sub

Public Sub file_created(ByVal obj As Object, ByVal e As FileSystemEventArgs)
    lf.WriteLine(Now.ToShortDateString & "-" & Now.ToShortTimeString & "-" & e.FullPath & "-created")
End Sub

Public Sub file_changed(ByVal obj As Object, ByVal e As FileSystemEventArgs)
    lf.WriteLine(Now.ToShortDateString & "-" & Now.ToShortTimeString & "-" & e.FullPath & "-changed")
End Sub

Public Sub file_deleted(ByVal obj As Object, ByVal e As FileSystemEventArgs)
    lf.WriteLine(Now.ToShortDateString & "-" & Now.ToShortTimeString & "-" & e.FullPath & "-deleted")
End Sub

Protected Overrides Sub OnStop()
    lf.Close() 
End Sub
End Class

У меня ServiceName установлено в fswService (так же, как имя класса). Когда я добавил установщик, я также установил имя_службы для ServiceInstaller1 как fswService.

Я хочу запустить эту службу во время выполнения, основываясь на настройке пользователем пути к папке, которая будет отслеживаться. Для этого у меня есть следующее:

Dim fsw_controller As New ServiceProcess.ServiceController
fsw_controller.Start(fswService)

2 проблемы: во-первых, ошибка intellisense, говорящая: 'fswService' является типом и не может использоваться в качестве выражения. во-вторых, я не могу найти способ передать службе путь к папке для просмотра (которая хранится в My.Settings.userPath).

Я действительно думал, что именно так вы запускаете службу. Я что-то упустил?

Ваша помощь, как всегда, ценится. Спасибо

Ответы [ 2 ]

0 голосов
/ 28 мая 2010

Вы можете отправить целочисленное значение (от 128 до 255) только через процедуру ServiceController.ExecuteCommand. Затем вы переопределяете событие OnCustomCommand в своей службе Windows, которое запускается, когда ExecuteCommand отправляется этой конкретной службе. Я бы сохранил имя папки, которую нужно просмотреть, в текстовом файле, и просто бы событие OnCustomCommand проверило этот файл на наличие папки. Вероятно, вы получаете эту ошибку, потому что вы запустили процедуру запуска ServiceController, когда служба Windows уже работала. Чтобы обновить свойство ServiceController.Status, запустите процедуру StatusController.Refresh ().

0 голосов
/ 28 мая 2010

ки. Я думаю, что я понял их обоих, но я получаю сообщение об ошибке при запуске приложения.

В сервисном файле я изменил

fsw.Path = args(0)

К

fsw.Path = My.Settings.userPath

Чтобы исправить запуск службы (как я уже упоминал в моем комментарии), я сделал:

Dim fsw_controller As New ServiceController("fswService")
fsw_controller.Start()

Я перестроил приложение, переустановил сервис с помощью installutil.exe и запустил его. Но я получаю сообщение об ошибке:

InvalidOperationException was unhandled
Cannot start service fswService on computer '.'.

Любая помощь с этим ?? Пожалуйста ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...