VBNet创建与安装Windows服务

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

用VB.NET创建与安装Windows服务一、引言:在WindowsNT、Windows2000、WindowsXP等多任务操作系统中,常常需要运行后台操作的应用程序,它们被称为Windows服务(NT服务)。由Windows服务执行的任务一般不需要用户界面(其控制台界面除外),可由用户手动启动或随计算机启动,并在后台持续运行。像IIS、SQLServer以及很多反病毒软件都使用Windows服务。二、Windows服务的特点:1、Windows服务不依赖用户登录,可以在计算机启动时开始运行,当然也可以手工启动。2、Windows服务需要一个特定的安装过程,使之运行在特定的环境中,双击编译好的EXE文件无法运行它。3、Windows服务一般没有用户界面,但可以有一个控制界面以操纵服务的启动、停止或设置参数。4、用户可以通过“控制面板”——“管理工具”——“服务”来查看并管理系统中的Windows服务,如图1所示。三、创建Windows服务:在.NET推出以前,Windows服务一般都用C++创建。虽然VB利用第三方工具集也可以创建Windows服务,但线程和安装的问题使开发人员多数不愿使用这种方式。在.NET中,上述复杂的操作都被封装在.NETFramework类中,任何.NET语言都可以用于创建Windows服务,且十分方便。创建Windows服务需要用到下面几个类:System.ServiceProcess.ServiceBase类:实现服务的基类,包含以下几个重要事件。事件说明OnStart服务启动时发生,初始化代码一般放在该事件中OnStop服务停止时发生,结束代码放在该事件中OnContinue服务暂停后继续运行时发生OnPause服务暂停时发生OnShutdown关闭操作系统时发生System.ServiceProcess.ServiceProcessInstaller类:用于服务的安装,包含了服务安装时所需要的一些必要信息。属性说明Account运行服务的帐户类型,一般用最高权限的LocalSystem;如使用User,则必须提供用户名和密码Username用户名,如Account设为User则要用到本属性Password密码,如Account设为User则要用到本属性System.ServiceProecss.ServiceInstaller类:与安装程序InstallUtil.exe交互,提供安装所需的部分信息。属性说明DisplayName显示在ServerExplorer中的名称StartType服务的启动方式,可使用Autimatic(自动)、Manual(手动)下面,我们创建一个文件监视Windows服务。给它指定一个目录后,该服务能监视目录内任何文件的新建、修改、更名、删除等操作,并将信息写入到系统事件日志中。用户通过“控制面板”——“管理工具”——“事件查看器”——“应用程序”即可了解上述信息。1、新建一“Windows服务”类型的工程,将该工程命名为FileWatcher。2、在“解决方案资源管理器”中,将默认的Service1.vb更名为FileWatcher.vb;在“属性”窗口中将(Name)和ServiceName属性均改为FileWatcher。右击工程,在“属性”中将“启动对象”改为FileWatcher。3、在代码设计器中,展开系统自动生成的代码,找到如下语句:ServicesToRun=NewSystem.ServiceProcess.ServiceBase(){NewService1()}将行末的Service1该为FileWatcher。4、接下来,在代码设计器中加入如下代码:ImportsSystem.ServiceProcessImportsSystem.IO'引用命名空间PublicClassFileWatcherInheritsSystem.ServiceProcess.ServiceBase#Region组件设计器生成的代码PrivateMyFileSystemWatcherAsNewFileSystemWatcherPrivateMyEventLogAsNewEventLog'分别建立FileSystemWatcher类和EventLog类的实例,MyFileSystemWatcher用于监视指定目录内文件的变化,MyEventLog将事件信息写入日志中ProtectedOverridesSubOnStart(ByValargs()AsString)DimfAsString=C:\WatcherDir.txtIfFile.Exists(f)ThenDimMyStreamReaderAsStreamReader=NewStreamReader(f)MyFileSystemWatcher.Path=MyStreamReader.ReadLineMyStreamReader.Close()ElseMyFileSystemWatcher.Path=c:\EndIf'若C:\WatcherDir.txt文件存在则打开它,读取并设置监视目录;否则监视目录设为C:\MyFileSystemWatcher.NotifyFilter=NotifyFilters.CreationTimeOrNotifyFilters.FileNameOrNotifyFilters.LastWriteOrNotifyFilters.SizeOrNotifyFilters.AttributesOrNotifyFilters.DirectoryName'要监视目录中的哪些变化,可根据情况取舍组合AddHandlerMyFileSystemWatcher.Changed,AddressOfOnChangedAddHandlerMyFileSystemWatcher.Created,AddressOfOnCreatedAddHandlerMyFileSystemWatcher.Deleted,AddressOfOnDeletedAddHandlerMyFileSystemWatcher.Renamed,AddressOfOnRenamed'建立MyFileSystemWatcher的事件与处理过程的联系MyFileSystemWatcher.EnableRaisingEvents=True'开始监视服务MyEventLog.Log=Application'将消息写入系统的Application事件日志MyEventLog.Source=FileWatcher'表明写消息的程序是FileWatcherEndSubProtectedOverridesSubOnStop()MyFileSystemWatcher.EnableRaisingEvents=False'停止监视服务EndSubPrivateSubOnCreated(ByValsenderAsSystem.Object,ByValeAsSystem.IO.FileSystemEventArgs)MyEventLog.WriteEntry(e.FullPath&被创建)EndSubPrivateSubOnDeleted(ByValsenderAsSystem.Object,ByValeAsSystem.IO.FileSystemEventArgs)MyEventLog.WriteEntry(e.FullPath&被删除)EndSubPrivateSubOnRenamed(ByValsenderAsSystem.Object,ByValeAsSystem.IO.RenamedEventArgs)MyEventLog.WriteEntry(e.OldFullPath&被更名为&e.FullPath)EndSubPrivateSubOnChanged(ByValsenderAsSystem.Object,ByValeAsSystem.IO.FileSystemEventArgs)MyEventLog.WriteEntry(e.FullPath&被修改)EndSubEndClass5、下面为工程添加安装信息。切换到FileWatcher的设计界面,右击选择“添加安装程序”,系统会自动创建新组件ProjectInstaller1,并添加ServiceProcessInstaller1和ServiceInstaller1组件。将ServiceProcessInstaller1的Account属性设为LocalSystem,ServiceInstaller1的DisplayName属性改为FileWatcher,StartType属性设为Manual。6、最后生成FileWatcher.exe。四、创建服务控制界面:我们可以通过“管理工具”中的“服务”程序来管理服务,但更常见的方式是创建一个专门的控制界面来操纵服务。它是一个普通的Windows应用程序,可以启动和停止服务,还可向服务传递设置参数。这需要用到ServiceController类,它位于System.ServiceProcess命名空间,使用前要添加对System.ServiceProcess.dll的引用。ServiceController类有以下常用方法、属性:方法、属性说明Start方法启动对应的服务Stop方法停止对应的服务Status属性枚举属性,表示服务的状态ServiceName属性对应服务的名称以下为建立服务控制界面的步骤:1、新建一“Windows应用程序”类型的工程,命名为FileWatcherPanel,界面如图2所示。2、添加对System.ServiceProcess.dll的引用,选择“项目”——“添加引用”。3、在代码设计器中添加如下代码:ImportsSystem.ServiceProcessImportsSystem.IO'引用命名空间PublicClassForm1InheritsSystem.Windows.Forms.Form#RegionWindows窗体设计器生成的代码DimMyControllerAsServiceControllerPrivateSubForm1_Load(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMyBase.LoadMyController=NewServiceController(FileWatcher)'建立一个ServiceContrller类的实例MyController,用于控制FileWatcher服务TextBox1.Text=C:\'默认的监视目录IfMyController.Status=ServiceControllerStatus.RunningThenButton1.Enabled=FalseButton2.Enabled=TrueElseButton1.Enabled=TrueButton2.Enabled=FalseEndIf'设置按钮的初始状态EndSubPrivateSubButton1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimMyStreamWriterAsStreamWriter=NewStreamWriter(C:\WatcherDir.txt)MyStreamWriter.WriteLine(TextBox1.Text)'ServiceController类不能直接向服务传递字符串,故需要将监视目录信息写入一个自定义的文件中,服务启动时打开此文件并获得目录MyStreamWriter.Close()TryMyController.Start()'启动FileWatcher服务Button1.Enabled=FalseButton2.Enabled=TrueCatchexAsExceptionMsgBox(不能启动

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功