使我的程序后台运行-Windows服务.ppt

上传人:sh****n 文档编号:2811747 上传时间:2019-11-30 格式:PPT 页数:41 大小:1.51MB
返回 下载 相关 举报
使我的程序后台运行-Windows服务.ppt_第1页
第1页 / 共41页
使我的程序后台运行-Windows服务.ppt_第2页
第2页 / 共41页
使我的程序后台运行-Windows服务.ppt_第3页
第3页 / 共41页
点击查看更多>>
资源描述
第20章 使我的程序后台运行Windows服务,Windows服务是长时间运行的程序,这些程序执行任务时不与用户交互。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这些特性使Windows服务非常适合在服务器上使用,每当需要使用不会影响在同一台计算机上工作的其他用户的功能时也适用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。,章节内容,20.1 什么是Windows服务 20.2 创建我的第一个Windows服务 20.3 安装和卸载服务 20.4 启动和停止服务 20.5 Windows服务应用实例:数据库备份,20.1 什么是Windows服务,Windows服务是可以长时间运行的程序,可以在计算机启动时自动启动,也可以暂停、重新启动或者卸载,并且在执行任务时不显示任何用户界面。,20.2 创建我的第一个Windows服务,3个步骤: 设置ServiceName属性; 为服务应用程序创建必需的安装程序; 重写OnStart和OnStop方法并为其指定代码,以对服务的行为方式进行自定义。,示例:自定义事件日志,Step1:新建一个Windows服务项目。单击菜单栏中的【文件】【新建项目】命令,打开【新建项目】窗口在【模板】列表框中选择【Windows服务】,在【名称】文本框中输入“FirstWinService”。,在【解决方案资源管理器】窗口,可以看到一个Service1.vb文件,这是Windows服务的代码文件,我们将其重命名为FirstWinService.vb。,Step2:在【属性】窗口中,设置服务的ServiceName属性,如下图。该属性用于对系统标识服务的名称。,Windows服务的其他属性,CanStop:True指示服务将接受停止运行的请求;False指示禁止停止运行服务。 CanShutdown:True指示服务希望在运行该服务的计算机关闭时收到通知,以便能够调用OnShutdown过程。 CanPauseAndContinue:True指示服务将接受暂停或继续运行的请求;False指示禁止服务暂停运行和继续运行。,CanHandlePowerEvent:True指示服务可以处理有关计算机电源状态更改的通知;False指示禁止服务得到有关这些更改的通知。 AutoLog:True表示在服务执行操作时将信息项写入应用程序的事件日志;False表示禁用此功能。 这些属性用于确定服务的工作机制。默认情况下,AutoLog设置为True。当CanStop或CanPauseAndContinue设置为False时,服务控制管理器会禁用相应的停止、暂停或继续服务的菜单选项。,Step3:属性设置完毕后,我们还需要为OnStart和OnStop过程填写所需的处理。 由于该服务要实现自定义事件日志的功能,这可以由EventLog组件来实现。在工具箱的【组件】选项卡,将EventLog组件拖到服务设计器中。,Step4:编写构造函数以定义一个用户事件日志。可以选择方法声明下拉列表中的New以添加一个空的New方法。,下面是构造函数的代码,定义了一个用户事件日志。 1 Public Sub New( ) 2 调用基类的构造函数 3 MyBase.New( ) 4 InitializeComponent( ) 5 创建一个系统日志源 6 If Not System.Diagnostics.EventLog.SourceExists(“MySource“) Then 7 System.Diagnostics.EventLog.CreateEventSource(“MySource“, _ 8 “MyNewLog“) 9 End If 10 设置EventLog组件的源 11 EventLog1.Source = “MySource“ 12 设置EventLog组件的日志名称 13 EventLog1.Log = “MyNewLog“ 14 End Sub,Step5:重写OnStart方法,定义服务启动时发生的情况。 1 Protected Overrides Sub OnStart(ByVal args() As String) 2 写入日志,描述信息为“In OnStart” 3 EventLog1.WriteEntry(“In OnStart“) 4 End Sub,Step6:重写OnStop方法,定义服务停止时发生的情况。 1 Protected Overrides Sub OnStop( ) 2 写入日志,描述信息为“In OnStop” 3 EventLog1.WriteEntry(“In OnStop.“) 4 End Sub,除此之外,还可以重写OnPause、OnContinue和OnShutdown方法来定义当服务暂停、继续和系统关机时的处理。 至此,我们的FirstWinService服务就基本完成了。 单击菜单栏中的【生成】【生成解决方案】来生成项目。注意,不要通过按【F5】键来运行项目,因为Windows服务项目不能以这种方式来运行。,20.3 安装和卸载服务,Windows服务编写完成以后,还需要安装以后才能启动。我们需要为FirstWinService添加一个安装程序,这是必需的。,添加组件,在【解决方案资源管理器】窗口中,右击【FirstWinService.vb】,在打开的右键菜单中单击【视图设计器】,打开视图设计窗口。 在该窗口的任意一个空白的地方右击,在打开的右键菜单中单击【添加安装程序】。 此时,项目中就添加了一个新类ProjectInstaller和两个安装组件ServiceProcessInstaller和 ServiceInstaller,并且服务的属性值被复制到组件。,设置ServiceInstaller1组件的属性,单击ServiceInstaller1组件,打开其【属性】窗口,验证ServiceName属性的值已为与服务本身的ServiceName属性的值相同,并将StartType属性设置为Automatic。 该属性用于确定启动服务的方式,可选值有以下几个。 Manual:服务安装后,必须手动启动。 Automatic:每次计算机重新启动时,服务都会自动启动。 Disabled:服务无法启动。,设置ServiceProcessInstaller1组件的属性,在设计器中单击ServiceProcessInstaller1,打开其【属性】窗口,将Account属性设置为LocalService。 该属性用于设置服务运行的安全上下文,可选值有以下几个。 User,当服务已安装并且在由网络上的单一用户指定的帐户的上下文中运行时,该类型将使系统要求提供有效的用户名和密码。 LocalService,该类型在用作本地计算机上的非特权用户并向任意远程服务器显示匿名凭据的帐户的上下文中运行。 LocalSystem,该类型在提供多种本地特权并向任意远程服务器显示计算机凭据的帐户的上下文中运行。 NetworkService,该类型在用作本地计算机上的非特权用户并向任意远程服务器显示计算机凭据的帐户的上下文中运行。,添加安装项目,在【解决方案资源管理器】窗口中,右击解决方案,在打开的右键菜单中单击【添加】【新建项目】。 在打开的【新建项目】窗口中的【项目类型】列表框中选择【安装和部署】项目,在【模板】列表框中选择【安装项目】,在【名称】文本框中输入“MyServiceSetup”,【解决方案】下拉列表框中选择【添入解决方案】。 单击【确定】按钮后,安装项目随即添加到当前解决方案中。,将Windows服务项目的输出MyNewService.exe添加到安装项目中,在【解决方案资源管理器】窗口中,右击【MyServiceSetup】项目,在打开的右键菜单中单击【添加】【项目输出】命令,打开【添加项目输出组】窗口。 在【项目】下拉列表框中选择【MyNewService】,在其列表框中选择【主输出】。单击【确定】按钮后,MyNewService 的主输出的项目项被添加到安装项目中。,添加自定义操作以安装MyNewService.exe文件,在【解决方案资源管理器】窗口中右击安装项目,在打开的右键菜单中单击【视图】【自定义操作】打开【自定义操作】编辑器。在【自定义操作】编辑器中右击【自定义操作】选项,在打开的右键菜单中单击【添加自定义操作】。,之后打开【选择项目中的项】窗口。在【查找范围】下拉列表框中选择【应用程序文件夹】,在其列表框中选择【MyNewService 的主输出(活动)】。,单击【确定】按钮后,主输出被添加到自定义操作的所有4个节点,即安装、提交、回滚和卸载。,在【解决方案资源管理器】窗口中,右击【MyServiceSetup】项目,在打开的右键菜单中单击【生成】命令,以生成该项目。 至此,Windows服务的安装程序就完成了。,利用安装项目安装Windows服务,右击【解决方案资源管理器】窗口中的【MyServiceSetup】安装项目,在打开的右键菜单中单击【安装】,打开安装向导窗口。,单击【下一步】,选择安装文件夹。,单击【下一步】,确认安装。,单击【下一步】,开始安装过程。,安装完成后,单击【关闭】按钮。,此时,打开【服务器资源管理器】窗口,展开服务器节点,在服务中即可看到FirstWinService服务。,也可以右击【我的电脑】,在打开的右键菜单中单击【管理】,打开【计算机管理】窗口,在左侧列表框中单击【服务和应用程序】下的【服务】,也可以看到FirstWinService服务。,卸载服务,一种是打开【控制面板】,双击【添加或删除程序】,找到该安装文件,单击【删除】按钮。,另一种方法是找到安装项目的msi文件,该文件位于安装项目的Release文件夹下。,20.4 启动和停止服务,服务安装以后,可以手动的启动或者停止。在【计算机管理】窗口,右击该服务,在打开的右键菜单中单击【启动】或者【停止】即可。,由于FirstWinService在启动和停止的时候均会写入日志,因此可以查看服务的事件日志输出。在【计算机管理】窗口中,在左侧列表框中单击【事件查看器】选项,即可看到MyNewLog,这是我们自定义的日志源。打开MyNewLog,即可看到写入的日志信息。,右击该日志信息,在打开的右键菜单中单击【属性】,可以看到该日志信息的描述。,20.5 Windows服务应用实例:数据库备份,应用背景:在服务器上常会有一些重要的数据库,为了防止数据丢失或者因为程序崩溃或其他异常情况导致数据损坏,可以定期备份数据库中的数据。本节就来实现这个定期备份数据库的Windows服务。,添加计时器,首先新建一个Windows服务应用工程,并将计时器添加到工程中来,在服务的构造函数中初始化计时器。 【代码演示】 下面代码是服务的构造函数,完成计时器的初始化。 1 Public Sub New( ) 2 MyBase.New( ) 3 此调用是Windows窗体设计器所必需的 4 InitializeComponent( ) 5 在InitializeComponent( )调用之后添加任何初始化 6 每一分钟就执行备份 7 Timer1.Interval = 60000 8 Timer1.Enabled =False 9 End Sub,重写OnStart方法和OnStop方法,在服务启动和停止时分别启动计时器和停止计时器。 【代码演示】 下面代码重写OnStart方法和OnStop方法,实现计时器的启动和停止。 1 Protected Overrides Sub OnStart(ByVal args() As String) 2 请在此处添加代码以启动您的服务。此方法应完成设置工作, 3 以使您的服务开始工作。 4 Timer1.Start( ) 5 End Sub 6 7 Protected Overrides Sub OnStop( ) 8 在此处添加代码以执行任何必要的拆解操作,从而停止您的服务。 9 Timer1.Stop( ) 10 End Sub,该服务的重点代码在于计时器每隔一定的时间间隔(本例中是一分钟)就执行数据库备份的工作。 下面代码是计时器的Elapsed事件过程,实现数据库的备份。 1 Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed 2 Dim connString As String = “Data Source=.;Initial Catalog=VBNET2008;Integrated Security=True;“ 3 Dim conn As SqlConnection = New SqlConnection( ) 4 conn.ConnectionString = connString 5 执行备份的语句 6 Dim sql As String = “BACKUP DATABASE xiaoqu TO DISK = C:VBNET2008.bak WITH FORMAT“ 7 Dim command As SqlCommand = New SqlCommand(sql) 8 command.Connection = conn 9 Try 10 开始执行 11 conn.Open( ) 12 command.ExecuteNonQuery( ) 13 Catch ex As SqlException 14 Finally 15 conn.Close( ) 16 End Try 17 End Sub,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!