windows的服务应用.docx
- 文档编号:20099153
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:130
- 大小:135KB
windows的服务应用.docx
《windows的服务应用.docx》由会员分享,可在线阅读,更多相关《windows的服务应用.docx(130页珍藏版)》请在冰豆网上搜索。
windows的服务应用
Windows服务应用程序
使用MicrosoftVisualStudio.NET或Microsoft.NET框架SDK,可以很轻松地通过创建作为服务安装的应用程序来创建服务。
这种类型的应用程序称为Windows服务。
使用框架功能,可以创建服务,安装服务和启动、停止服务以及用其他方式控制服务的行为。
注意Windows服务应用程序项目模板和相关的功能在VisualBasic和VisualC#.NET的标准版中不可用。
有关更多信息,请参阅VisualBasic标准版功能或VisualC#标准版的功能。
本节内容
Windows服务应用程序介绍
概述Windows服务应用程序、服务的生存期和服务应用程序与其他通用项目类型的差异。
演练:
在组件设计器中创建Windows服务应用程序
提供在VisualBasic和VisualC#中创建服务的一个示例。
服务应用程序编程结构
解释用于服务编程的语言元素。
创建Windows服务
描述使用Windows服务项目模板创建和配置Windows服务的过程。
Windows服务应用程序介绍
请参见
服务应用程序编程结构|创建Windows服务|安装和卸载服务|启动服务|启动服务|调试Windows服务应用程序|演练:
在组件设计器中创建Windows服务应用程序|将安装程序添加到服务应用程序|演练:
在组件设计器中创建Windows服务应用程序|安装项目|演练:
创建自定义操作
MicrosoftWindows服务(即,以前的NT服务)使您能够创建在它们自己的Windows会话中可长时间运行的可执行应用程序。
这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。
这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。
还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。
有关服务和Windows会话的更多信息,请参阅MSDNOnline的PlatformSDK文档中的“AboutServices”部分。
注意Windows服务应用程序项目模板和相关的功能在VisualBasic和VisualC#.NET的标准版中不可用。
有关更多信息,请参阅VisualBasic标准版功能或VisualC#标准版的功能。
通过创建作为服务安装的应用程序,可以轻松地创建服务。
例如,假设要监视性能计数器数据并对阈值做出反应。
可以编写一个侦听性能计数器数据的Windows服务应用程序、部署该应用程序并开始收集和分析数据。
将服务创建为MicrosoftVisualStudio.NET项目,并在其中定义特定代码,以控制哪些命令可以发送到服务和接收到这些命令时采取什么操作。
可以发送到服务的命令包括开始、暂停、继续和停止该服务,以及执行自定义命令。
创建并生成了应用程序后,可以通过运行命令行实用工具InstallUtil.exe并将路径传递给服务的可执行文件,或通过使用VisualStudio的部署功能来安装该应用程序。
然后可以使用服务控制管理器启动、停止、暂停、继续和配置服务。
这些任务中有许多也可以在“服务器资源管理器”的“服务”节点中或通过使用ServiceController类来实现。
服务器应用程序与其他VisualStudio.NET应用程序对比
服务应用程序与其他许多项目类型的功能在几个方面有所不同:
∙必须将服务应用程序项目创建的已编译可执行文件安装在服务器上,此项目才能以有意义的方式运行。
不能通过按F5键或F11键来调试或运行服务应用程序;不能立即运行服务或进入并单步执行其代码。
相反,必须安装和启动服务,然后将一个调试器附加到服务的进程中。
有关更多信息,请参阅调试Windows服务应用程序。
∙与一些类型的项目不同,对于服务应用程序,必须为其创建安装组件。
安装组件在服务器上安装和注册服务,并用Windows服务控制管理器为服务创建一个项。
有关更多信息,请参阅将安装程序添加到服务应用程序。
∙服务应用程序的Main方法必须为项目包含的服务发出Run命令。
Run方法将服务加载到适当服务器上的服务控制管理器中。
如果使用Windows服务项目模板,系统将自动为您写此方法。
请注意,加载服务与启动服务不同。
有关更多信息,请参阅下面的“服务生存期”。
∙Windows服务应用程序与其他应用程序在不同的Windows站上运行。
因此,从Windows服务应用程序内部引发的对话框不会被看到并且可能导致程序停止响应。
同样,错误信息应记录在Windows事件日志中,而不是在UI中引发。
∙Windows服务应用程序在各自的安全上下文中运行,并且在用户登录到安装有该程序的Windows计算机之前启动。
应仔细计划在哪些用户帐户内运行服务;在系统帐户下运行的服务比在用户帐户下运行的服务具有更多的权限和特权。
服务生存期
服务在其生存期内要经历几个内部状态。
首先,将服务安装在将要运行它的系统上。
此进程执行服务项目的安装程序,并将服务加载到该计算机的服务控制管理器中。
服务控制管理器是由Windows提供的管理服务的中央实用工具。
服务加载后,必须启动。
启动服务使服务开始运行。
可以从服务控制管理器、从“服务器资源管理器”或通过调用ServiceController.Start方法从代码启动服务。
Start方法将处理传递给应用程序的OnStart方法并处理您在那里定义的任何代码。
运行的服务可以以这种状态无限期地存在下去,直到它被停止或暂停或者计算机关闭。
服务可以以三种基本状态之一存在:
运行、暂停或停止。
服务也可以报告挂起命令的状态:
ContinuePending、PausePending、StartPending或StopPending。
这些状态指示命令已经发出(如暂停正在运行的服务的命令),但尚未执行。
可以查询ServiceController.Status属性来确定服务的状态,或者使用ServiceController.WaitForStatus方法在这些状态中的任何状态发生时执行某个操作。
可以从服务控制管理器、从“服务器资源管理器”或通过从代码调用方法来暂停、停止或继续服务。
每种操作都可以调用服务中的一种相关过程(OnStop、OnPause或OnContinue),在其中可以定义当服务状态更改时所执行的其他处理。
服务类型
在VisualStudio.NET中可以创建两种类型的服务。
进程中的唯一服务被指定为Win32OwnProcess类型。
与其他服务共享进程的服务被指定为Win32ShareProcess类型。
可以通过查询ServiceController.ServiceType属性来检索服务类型。
如果查询不是在VisualStudio.NET中创建的现有服务,则偶尔可能会看到其他服务类型。
有关更多信息,请参阅ServiceType枚举。
服务和ServiceController组件
ServiceController组件用于连接到已安装的服务并操作其状态;使用ServiceController组件可以启动和停止服务、暂停和继续它的运行以及将自定义命令发送到服务。
但是,在创建服务应用程序时不需使用ServiceController组件。
实际上,多数情况下,ServiceController组件存在于来自定义服务的Windows服务应用程序的一个单独的应用程序中。
有关ServiceController组件的更多信息,请参阅监视Windows服务。
部署和安装服务
VisualStudio.NET随附有安装组件,这些组件可以安装与服务应用程序相关的资源。
安装组件在正在安装到的系统上注册一项单个的服务,并使服务控制管理器知道该服务的存在。
在将安装程序添加到应用程序之后,下一步是创建安装项目,该项目将安装已编译的项目文件并运行安装服务所需的安装程序。
若要创建完整的安装项目,您必须将服务项目的输出添加到该安装项目,然后添加自定义操作以安装您的服务。
有关安装项目的更多信息,请参阅安装项目。
有关自定义操作的更多信息,请参阅演练:
创建自定义操作。
要求
∙服务必须创建在Windows服务应用程序项目或其他支持.NET的项目中,而该项目将在从ServiceBase类生成和继承时创建.exe文件。
∙包含Windows服务的项目必须有该项目及其服务的安装组件。
这可以从“属性”窗口轻松实现。
有关更多信息,请参阅将安装程序添加到服务应用程序。
演练:
在组件设计器中创建Windows服务应用程序
请参见
Windows服务应用程序|Windows服务应用程序介绍|将安装程序添加到服务应用程序|安装和卸载服务|调试Windows服务应用程序|启动事件查看器|访问和初始化服务器资源管理器
注意Windows服务模板和相关功能在VisualBasic标准版和VisualC#.NET中不可用。
有关更多信息,请参阅VisualBasic标准版功能或VisualC#标准版的功能。
本主题中的步骤引导您完成创建简单的向事件日志写入消息的Windows服务应用程序的过程。
创建和使用服务所执行的基本步骤包括:
∙使用Windows服务应用程序模板创建项目。
该模板为您创建一个从ServiceBase继承的类,并编写大量基本服务代码,例如启动服务的代码。
∙编写OnStart和OnStop过程的代码,并重写要重新定义的任何其他方法。
∙添加服务应用程序所必需的安装程序。
默认情况下,当单击“添加安装程序”链接时,一个包含两个或多个安装程序的类将被添加到应用程序中:
一个用于安装进程,其他安装程序中的每个用于项目包含的每个关联的服务。
∙生成您的项目。
∙创建安装项目以安装服务,然后进行安装。
∙访问Windows2000服务控制管理器并启动您的服务。
首先,创建项目并设置服务正常运行所必需的值。
创建并配置服务
1.在“文件”菜单上指向“新建”,然后单击“项目”。
“新建项目”对话框打开。
2.在VisualBasic或VisualC#项目模板的列表中选择“Windows服务”项目,并将其命名为MyNewService。
注意项目模板自动添加从System.ServiceProcess.ServiceBase继承的名为Service1的组件类。
3.单击设计器。
然后,在“属性”窗口中,将Service1的ServiceName属性设置为MyNewService。
4.将Name属性设置为MyNewService。
5.将AutoLog属性设置为true。
6.编辑Main方法以创建MyNewService的实例。
当在步骤3中重命名服务时,未在Main方法中修改类名。
7.'VisualBasic
8.SharedSubMain()
9.DimServicesToRun()AsSystem.ServiceProcess.ServiceBase
10.'Changethefollowinglinetomatch.
11.ServicesToRun=NewSystem.ServiceProcess.ServiceBase()_
12.{NewMyNewService()}
13.System.ServiceProcess.ServiceBase.Run(ServicesToRun)
14.EndSub
15.
16.//C#
17.staticvoidMain()
18.{
19.System.ServiceProcess.ServiceBase[]ServicesToRun;
20.//Changethefollowinglinetomatch.
21.ServicesToRun=newSystem.ServiceProcess.ServiceBase[]
22.{newMyNewService()};
23.System.ServiceProcess.ServiceBase.Run(ServicesToRun);
}
在下一节中,您将把自定义事件日志添加到Windows服务中。
事件日志与Windows服务没有任何形式的关联。
此处,EventLog组件用作可以添加到Windows服务的组件类型的示例。
有关自定义事件日志的更多信息,请参阅创建和移除自定义事件日志。
将自定义事件日志功能添加到服务中
1.在解决方案资源管理器中,右击Service1.vb或Service1.cs,并选择“视图设计器”。
2.在工具箱的“组件”选项卡中,将EventLog组件拖到设计器。
3.在解决方案资源管理器中,右击Service1.vb或Service1.cs,并选择“查看代码”。
4.编辑构造函数以定义一个用户事件日志。
展开设计器生成的代码的区域来访问VisualBasic中的构造函数。
5.'VisualBasic
6.PublicSubNew()
7.MyBase.New
8.InitializeComponent()
9.IfNotEventLog.SourceExists("MySource")Then
10.EventLog.CreateEventSource("MySource","MyNewLog")
11.EndIf
12.EventLog1.Source="MySource"
13.EventLog1.Log="MyNewLog"
14.EndSub
15.
16.//C#
17.publicMyNewService()
18.{
19.InitializeComponent();
20.if(!
System.Diagnostics.EventLog.SourceExists("MySource")){
21.System.Diagnostics.EventLog.CreateEventSource(
22."MySource","MyNewLog");
23.}
24.eventLog1.Source="MySource";
25.eventLog1.Log="MyNewLog";
}
定义当服务启动时发生的情况
∙在代码编辑器中,找到创建项目时被自动重写的OnStart方法,并编写代码来确定当服务开始运行时发生的情况:
∙'VisualBasic
∙ProtectedOverridesSubOnStart(ByValargs()AsString)
∙EventLog1.WriteEntry("InOnStart")
∙EndSub
∙
∙//C#
∙protectedoverridevoidOnStart(string[]args){
∙eventLog1.WriteEntry("InOnStart");
}
注意服务应用程序设计为长时间运行。
因此,它通常轮询或监视系统中的情况。
监视是在OnStart方法中设置的。
但是,OnStart实际上不进行监视。
一旦服务的操作开始,OnStart方法必须返回到操作系统。
它不能始终循环或阻塞。
若要设置简单的轮询机制,可以使用System.Timers.Timer组件。
在OnStart方法中,设置组件上的参数,然后将Timer.Enabled属性设置为true。
然后,计时器将在代码中周期性地引发事件,此时,服务可以进行其工作。
定义当服务停止时发生的情况
∙在代码编辑器中,找到创建项目时被自动重写的OnStop过程,并编写代码来确定当服务停止时发生的情况:
∙'VisualBasic
∙ProtectedOverridesSubOnStop()
∙EventLog1.WriteEntry("InOnStop.")
∙EndSub
∙
∙//C#
∙protectedoverridevoidOnStop(){
∙eventLog1.WriteEntry("InonStop.");
}
还可以重写OnPause、OnContinue和OnShutdown方法来定义对组件的进一步处理。
定义服务的其他操作
∙对于要处理的方法,重写适当的方法并定义要发生的操作。
下面的代码显示重写OnContinue方法时代码的情况:
'VisualBasic
ProtectedOverridesSubOnContinue()
EventLog1.WriteEntry("InOnContinue.")
EndSub
//C#
protectedoverridevoidOnContinue(){
eventLog1.WriteEntry("InOnContinue.");
}
某些自定义操作需要在安装Windows服务时发生,这可以由Installer类来完成。
VisualStudio可以专门为Windows服务创建这些安装程序并将它们添加到项目中。
为服务创建安装程序
1.返回到Service1的“设计”视图。
2.单击设计器的背景以选择服务本身,而不是它的任何内容。
3.在“属性”窗口中,单击属性列表下面灰色区域中的“添加安装程序”链接。
默认情况下,向您的项目添加包含两个安装程序的组件类。
将该组件命名为ProjectInstaller,它包含的安装程序分别是服务的安装程序和服务关联进程的安装程序。
4.访问ProjectInstaller的“设计”视图,然后单击“ServiceInstaller1”。
5.在“属性”窗口中,将ServiceName属性设置为MyNewService。
6.将StartType属性设置为Automatic。
生成服务项目
1.在解决方案资源管理器中,右击您的项目并从快捷菜单中选择“属性”。
出现项目的“属性页”对话框。
2.在左边的窗格中,选择“通用属性”文件夹中的“常规”选项卡。
3.在“启动对象”列表中,选择“MyNewService”。
4.按Ctrl+Shift+B生成项目。
生成项目后,便可以对其进行部署了。
安装项目将安装已编译的项目文件并运行要运行Windows服务所需的安装程序。
若要创建完整的安装项目,您需要将项目输出MyNewService.exe添加到安装项目,然后添加自定义操作来完成MyNewService.exe的安装。
有关安装项目的更多信息,请参阅安装项目。
有关自定义操作的更多信息,请参阅演练:
创建自定义操作。
为服务创建安装项目
1.在“文件”菜单上指向“添加项目”,然后选择“新建项目”。
2.在“项目类型”窗格中选择“安装和部署项目”文件夹。
3.在“模板”窗格中选择“安装项目”。
将项目命名为MyServiceSetup。
安装项目随即添加到解决方案。
然后,将Windows服务项目的输出MyNewService.exe添加到安装项目中。
向安装项目添加MyNewService.exe
1.在解决方案资源管理器中,右击“MyServiceSetup”,指向“添加”,然后选择“项目输出”。
出现“添加项目输出组”对话框。
2.在“项目”框中选择“MyNewService”。
3.在列表框中,选择“主输出”,然后单击“确定”。
MyNewService的主输出的项目项被添加到安装项目中。
现在添加自定义操作以安装MyNewService.exe文件。
向安装项目添加自定义操作
1.在解决方案资源管理器中右击安装项目,指向“视图”,然后选择“自定义操作”。
出现自定义操作编辑器。
2.在“自定义操作”编辑器中右击“自定义操作”节点,然后选择“添加自定义操作”。
出现“选择项目中的项”对话框。
3.在列表框中双击“应用程序文件夹”将其打开,选择“主输出来自MyNewService(活动)”,然后单击“确定”。
主输出被添加到自定义操作的所有四个节点——“安装”、“提交”、“回滚”和“卸载”。
4.生成安装项目。
安装Windows服务
∙浏览到保存安装项目的目录,运行.msi文件以安装MyNewService.exe。
启动和停止服务
1.通过执行下列操作之一打开服务控制管理器:
∙在Windows2000Professional中,在桌面上右击“我的电脑”,然后单击“管理”。
在“计算机管理”控制台中,展开“服务和应用程序”节点。
—或—
∙在Windows2000Server中,单击“开始”,指向“程序”,单击“管理工具”,然后单击“服务”。
注意在WindowsNT4.0版中,可以从控制面板中打开该对话框。
2.现在应该看到MyNewService列在窗口的“服务”区域中。
3.从列表中选择您的服务,右击该服务,然后单击“启动”。
4.右击该服务,然后单击“停止”。
验证服务的事件日志输出
1.打开服务器资源管理器并访问“事件日志”节点。
有关更多信息,请参阅在服务器资源管理器中处理事件日志。
注意服务器资源管理器的服务器节点在VisualBasic和VisualC#.NET标准版中不可用。
有关更多信息,请参阅VisualBasic标准版功能或VisualC#标准版的功能。
2.找到MyNewLog的列表并展开它。
您应该看到服务所执行操作的项。
卸载服务
∙在“开始”菜单上,打开“控制面板”并单击“添加/删除程序”,然后找到您的服务并单击“卸载”。
∙还可以通过右击.msi文件的程序图标并选择“卸载”来卸载该程序。
下一步
也可以利用ServiceController组件将命令发送到已安装的服务。
有关使用ServiceController组件的更多信息,请参阅监视Windows服务。
服务应用程序编程结构
请参见
Windows服务应用程序介绍|创建Windows服务|监视Windows服务
Windows服务应用程序基于从System.ServiceProcess.ServiceBase类继承的一个类。
从该类重写方法并为它们定义功能以确定服务的行为。
创建服务所涉及的类主要有:
∙System.ServiceProcess.ServiceBase——当创建服务时从ServiceBase类重写方法并定义代码,以确定服务在该继承类中的运行方式。
∙System.ServiceProcess
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- windows 服务 应用