четверг, 28 мая 2009 г.

Написание службы в VB.NET Express

VB.NET Express по умолчанию не имеет шаблона для написания собственного сервиса. Однако, все поправимо - отсюда http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=4511&lngWId=10
или отсюда
http://sites.google.com/site/mellerbeck/Home/Windows_Se1973412152006.zip?attredirects=0
можно скачать шаблоны и установить их в My Documents\Visual Studio 2005\Templates\ProjectTemplates\Visual Basic. Теперь, после перезапуска VBExpress, появится шаблон для сервиса (Windows Service).



Создаем проект из шаблона и первым делом добавляем таймер сервиса (это совсем не тот таймер, который по умолчанию висит в тулбаре!). Чтобы добавить его, лезем в Toolbox, и Choose Items:



Вытаскиваем таймер (правильный!) на стол (пусть, например, это будет Timer1), выставляем ему параметр interval на 10000 (10 секунд) и дважды кликаем на Timer1_Elapsed и пишем код:

Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed
'тут будет что-то, чем занимается сервис во время выполнения
End Sub


еще создаем код для старта и останова сервиса:

Protected Overrides Sub OnStart(ByVal args() As String)
Timer1.Enabled = True
'Еще какие-то действия при старте сервиса, инициализации там всякие
End Sub


Protected Overrides Sub OnStop()
Timer1.Enabled = False
'Еще какие-то действия при останове сервиса, инициализации там всякие
End Sub


Теперь надо добавить сервис-инсталлер, но поскольку в VBExpress такого инструмента нет, добавляем в проект новый класс и копируем в него:

Imports System
Imports System.Collections
Imports System.Configuration.Install
Imports System.ServiceProcess
Imports System.ComponentModel

_
Public Class MyProjectInstaller
Inherits Installer
Private serviceInstaller1 As ServiceInstaller
Private processInstaller As ServiceProcessInstaller

Public Sub New()
‘ Делаем инсталлер для процесса и сервиса
processInstaller = New ServiceProcessInstaller()
serviceInstaller1 = New ServiceInstaller()

‘ Сервис будет запускаться под Local System
processInstaller.Account = ServiceAccount.LocalSystem

‘ Сервис будет запускаться вручную.
serviceInstaller1.StartType = ServiceStartMode.Manual

‘ Имя сервиса должно совпадать с именем класса
serviceInstaller1.ServiceName = “Your Service”

‘ Добавляем инсталлеры в коллекцию.
Installers.Add(serviceInstaller1)
Installers.Add(processInstaller)
End Sub
End Class


Далее билдим наш проект, получаем файл .exe и инсталлируем его в систему при помощи C:\WINDOWS\Microsoft.NET\Framework\ версия дотнета\ InstallUtil.exe

InstallUtil.exe нашсервис.exe - инсталляция
InstallUtil.exe /u нашсервис.exe - деинсталляция

Источники:
http://michaelellerbeck.com/2009/01/12/creating-a-service-for-visual-basic-2008-express/
http://www.dotheweb.net/articles/dotnet/services.aspx
http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceinstaller(VS.71).aspx

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