VBNet创建与安装Windows服务_第1页
VBNet创建与安装Windows服务_第2页
VBNet创建与安装Windows服务_第3页
VBNet创建与安装Windows服务_第4页
VBNet创建与安装Windows服务_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、用VB.NET创建与安装Windows服务一、引言:在Windows NT、Windows 2000、Windows XP等多任务操作系统中,常常需要运行后台操作的应用程序,它们被称为Windows服务(NT服务)。由Windows服务执行的任务一般不需要用户界面(其控制台界面除外),可由用户手动启动或随计算机启动,并在后台持续运行。像IIS、SQL Server以及很多反病毒软件都使用Windows服务。二、Windows服务的特点:1、Windows服务不依赖用户登录,可以在计算机启动时开始运行,当然也可以手工启动。2、Windows服务需要一个特定的安装过程,使之运行在特定的环境中,双击

2、编译好的EXE文件无法运行它。3、Windows服务一般没有用户界面,但可以有一个控制界面以操纵服务的启动、停止或设置参数。4、用户可以通过“控制面板”“管理工具”“服务”来查看并管理系统中的Windows服务,如图1所示。三、创建Windows服务:在.NET推出以前,Windows服务一般都用C+创建。虽然VB利用第三方工具集也可以创建Windows服务,但线程和安装的问题使开发人员多数不愿使用这种方式。在.NET中,上述复杂的操作都被封装在.NET Framework类中,任何.NET语言都可以用于创建Windows服务,且十分方便。创建Windows服务需要用到下面几个类:l Syst

3、em.ServiceProcess.ServiceBase类:实现服务的基类,包含以下几个重要事件。事件说明OnStart服务启动时发生,初始化代码一般放在该事件中OnStop服务停止时发生,结束代码放在该事件中OnContinue服务暂停后继续运行时发生OnPause服务暂停时发生OnShutdown关闭操作系统时发生l System.ServiceProcess.ServiceProcessInstaller类:用于服务的安装,包含了服务安装时所需要的一些必要信息。属性说明Account运行服务的帐户类型,一般用最高权限的LocalSystem;如使用User,则必须提供用户名和密码Use

4、rname用户名,如Account设为User则要用到本属性Password密码,如Account设为User则要用到本属性l System.ServiceProecss.ServiceInstaller类:与安装程序InstallUtil.exe交互,提供安装所需的部分信息。属性说明DisplayName显示在Server Explorer中的名称StartType服务的启动方式,可使用Autimatic(自动)、Manual(手动)下面,我们创建一个文件监视Windows服务。给它指定一个目录后,该服务能监视目录内任何文件的新建、修改、更名、删除等操作,并将信息写入到系统事件日志中。用户通

5、过“控制面板”“管理工具”“事件查看器”“应用程序”即可了解上述信息。1、新建一“Windows服务”类型的工程,将该工程命名为FileWatcher。2、在“解决方案资源管理器”中,将默认的Service1.vb更名为FileWatcher.vb;在“属性”窗口中将(Name)和ServiceName属性均改为FileWatcher。右击工程,在“属性”中将“启动对象”改为FileWatcher。3、在代码设计器中,展开系统自动生成的代码,找到如下语句:ServicesToRun = New System.ServiceProcess.ServiceBase() New Service1()

6、将行末的Service1该为FileWatcher。4、接下来,在代码设计器中加入如下代码:Imports System.ServiceProcessImports System.IO引用命名空间Public Class FileWatcher Inherits System.ServiceProcess.ServiceBase#Region 组件设计器生成的代码 Private MyFileSystemWatcher As New FileSystemWatcher Private MyEventLog As New EventLog 分别建立FileSystemWatcher类和Event

7、Log类的实例,MyFileSystemWatcher用于监视指定目录内文件的变化,MyEventLog将事件信息写入日志中 Protected Overrides Sub OnStart(ByVal args() As String) Dim f As String = C:WatcherDir.txt If File.Exists(f) Then Dim MyStreamReader As StreamReader = New StreamReader(f) MyFileSystemWatcher.Path = MyStreamReader.ReadLine MyStreamReader.

8、Close() Else MyFileSystemWatcher.Path = c: End If 若C:WatcherDir.txt文件存在则打开它,读取并设置监视目录;否则监视目录设为C: MyFileSystemWatcher.NotifyFilter = NotifyFilters.CreationTime Or NotifyFilters.FileName Or NotifyFilters.LastWrite Or NotifyFilters.Size Or NotifyFilters.Attributes Or NotifyFilters.DirectoryName 要监视目录中的

9、哪些变化,可根据情况取舍组合 AddHandler MyFileSystemWatcher.Changed, AddressOf OnChanged AddHandler MyFileSystemWatcher.Created, AddressOf OnCreated AddHandler MyFileSystemWatcher.Deleted, AddressOf OnDeleted AddHandler MyFileSystemWatcher.Renamed, AddressOf OnRenamed 建立MyFileSystemWatcher的事件与处理过程的联系 MyFileSystem

10、Watcher.EnableRaisingEvents = True 开始监视服务 MyEventLog.Log = Application 将消息写入系统的Application事件日志 MyEventLog.Source = FileWatcher 表明写消息的程序是FileWatcher End Sub Protected Overrides Sub OnStop() MyFileSystemWatcher.EnableRaisingEvents = False 停止监视服务 End Sub Private Sub OnCreated(ByVal sender As System.Obj

11、ect, ByVal e As System.IO.FileSystemEventArgs) MyEventLog.WriteEntry(e.FullPath & 被创建) End Sub Private Sub OnDeleted(ByVal sender As System.Object, ByVal e As System.IO.FileSystemEventArgs) MyEventLog.WriteEntry(e.FullPath & 被删除) End Sub Private Sub OnRenamed(ByVal sender As System.Object, ByVal e A

12、s System.IO.RenamedEventArgs) MyEventLog.WriteEntry(e.OldFullPath & 被更名为 & e.FullPath) End Sub Private Sub OnChanged(ByVal sender As System.Object, ByVal e As System.IO.FileSystemEventArgs) MyEventLog.WriteEntry(e.FullPath & 被修改) End SubEnd Class5、下面为工程添加安装信息。切换到FileWatcher的设计界面,右击选择“添加安装程序”,系统会自动创建

13、新组件ProjectInstaller1,并添加ServiceProcessInstaller1和ServiceInstaller1组件。将ServiceProcessInstaller1的Account属性设为LocalSystem,ServiceInstaller1的DisplayName属性改为FileWatcher,StartType属性设为Manual。6、最后生成FileWatcher.exe。四、创建服务控制界面:我们可以通过“管理工具”中的“服务”程序来管理服务,但更常见的方式是创建一个专门的控制界面来操纵服务。它是一个普通的Windows应用程序,可以启动和停止服务,还可向服

14、务传递设置参数。这需要用到ServiceController类,它位于System.ServiceProcess命名空间,使用前要添加对System.ServiceProcess.dll的引用。ServiceController类有以下常用方法、属性:方法、属性说明Start方法启动对应的服务Stop方法停止对应的服务Status属性枚举属性,表示服务的状态ServiceName属性对应服务的名称以下为建立服务控制界面的步骤:1、 新建一“Windows应用程序”类型的工程,命名为FileWatcherPanel,界面如图2所示。2、 添加对System.ServiceProcess.dll的

15、引用,选择“项目”“添加引用”。3、 在代码设计器中添加如下代码:Imports System.ServiceProcessImports System.IO引用命名空间Public Class Form1 Inherits System.Windows.Forms.Form#Region Windows 窗体设计器生成的代码 Dim MyController As ServiceController Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load M

16、yController = New ServiceController(FileWatcher) 建立一个ServiceContrller类的实例MyController,用于控制FileWatcher服务 TextBox1.Text = C: 默认的监视目录 If MyController.Status = ServiceControllerStatus.Running Then Button1.Enabled = False Button2.Enabled = True Else Button1.Enabled = True Button2.Enabled = False End If 设

17、置按钮的初始状态 End Sub Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Dim MyStreamWriter As StreamWriter = New StreamWriter(C:WatcherDir.txt) MyStreamWriter.WriteLine(TextBox1.Text) ServiceController类不能直接向服务传递字符串,故需要将监视目录信息写入一个自定义的文件中,服务启动时打开此文件并获得目录 M

18、yStreamWriter.Close() Try MyController.Start() 启动FileWatcher服务 Button1.Enabled = False Button2.Enabled = True Catch ex As Exception MsgBox(不能启动服务!) End Try End Sub Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click Try MyController.Stop() 停止FileWatcher服务 Button1.Enabled = True Button2.Enabled = False Catch ex As Exception MsgBox(停止服务时发生异常!) End Try

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论