使用 Visual Studio .NET 开发 Windows 服务详解 - 第二部分






4.26/5 (11投票s)
本文详细介绍创建和安装简单 Windows 服务的步骤
如果您还没有阅读本文的第一部分,请点击 这里 tham khảo trước.
创建示例服务
以下是创建本文其余部分将使用的示例 .NET 服务所需的步骤
- 启动 Visual Studio,然后在“项目类型”下选择“Visual Basic”节点。在“模板”下,选择“Windows 服务”,并将项目命名为“MyWinService”。
- 在“解决方案资源管理器”下,选择文件名为“Service1.vb”的文件,然后在“属性”部分将其更改为“MyWinService.vb”。
- 在设计模式下打开“MyWinService.vb”。右键单击设计区域,然后选择“添加安装程序”。这将在设计区域放置两个组件,分别称为“ServiceProcessInstaller1”和“ServiceInstaller1”。
- 选择“ServiceInstaller1”,将其名称更改为“MyWinServiceInstaller”。同时将 ServiceName 从“Service1”更改为“MyWinService”。
- 选择“ServiceProcessInstaller1”,并将其名称更改为“MyWinServiceProcessInstaller”。
重要设置
- 服务安装程序:从解决方案资源管理器中选择 ProjectInstaller.vb 文件,然后单击 MyWinServiceInstaller 图标。服务安装程序具有以下重要属性
- Description:这是在 Windows 服务下显示的描述,它基本上向其他用户描述您的服务。
- Service Name:这是 Windows 用来标识您的服务的名称。
- Start Type:这里的选项是 Manual(手动)、Automatic(自动)或 Disabled(禁用)。Automatic 意味着服务将在每次 Windows 启动时自动启动。Manual 意味着您必须手动前往服务管理器并每次需要使用它时启动它。Disabled 意味着服务将完全无法运行。
- 服务进程安装程序:单击 ProjectInstaller.vb 文件下的 MyWinServiceProcessInstaller 图标。这里最重要的选项是“Account”(帐户)选项。这里的选择是
- LocalService:内置帐户,类似于已验证的本地用户。如果您在此帐户下运行服务,它将没有任何网络权限。
- NetworkService:内置帐户,类似于已验证的网络用户。在此模式下运行您的服务可以避免密码过期问题,并且通常适用于域环境。
- LocalSystem:这是一个非常强大的高权限帐户,通常不建议用于自定义服务(尽管它使运行服务变得非常容易,但以后可能会带来安全问题)。
- User:这可以是本地计算机用户或域用户。如果您计划将服务部署到其他域上的其他服务器,则必须确保使用正确的用户名!
- 服务行为选项:常规服务选项决定服务如何记录事件、它如何以及是否可以暂停、停止或继续等。以下是选项
- AutoLog:如果您使用此选项,您基本上是将事件日志条目的控制权交给了服务。
- CanHandlePowerEvent:用于笔记本电脑电源事件。大多数服务不需要。
- CanHandleSessionChangeEvent:通常将此项设置为 True 是个好主意。
- CanPauseAndContinue:如果您想允许用户暂停和继续服务,则此项很重要。
- CanShutdown:将此项设置为 True 是个好主意,这样您就可以实际关闭服务!
- CanStop:同样,将此项设置为 True 是个好主意,这样您就可以实际停止您的服务!
代码
默认情况下,创建 Windows 服务时会创建两个子例程,分别称为“OnStart”和“OnStop”。以下是我们 Windows 服务中每个部分需要放置的内容,以便让示例服务正常运行
Protected Overrides Sub OnStart(ByVal args() As String)
EventLog.WriteEntry("MyService Started")
End Sub
Protected Overrides Sub OnStop()
EventLog.WriteEntry("MyService Stopped")
End Sub
Protected Overrides Sub OnPause()
EventLog.WriteEntry("MyService Paused")
End Sub
Protected Overrides Sub OnContinue()
EventLog.WriteEntry("MyService Resumed")
End Sub
Protected Overrides Sub OnCustomCommand(ByVal command As Integer)
If command = 200 Then
EventLog.WriteEntry("Custom Command 200 invoked")
ElseIf command = 210 Then
EventLog.WriteEntry("Custom Command 210 invoked")
End If
End Sub
要构建服务,只需单击“生成 > 生成 MyWinService”。这将在“.\bin\Release\”或“.\bin\Debug”中创建一个可执行文件,具体取决于您是在调试模式还是发行模式下编译它。
安装 Windows 服务
安装 Windows 服务有两种方法
- 使用“InstallUtil.exe”适用于正确的 .NET Framework 版本。
- 通过为您的服务创建“设置和部署”项目。
在开发 Windows 服务时,使用 Install Utility 来安装和卸载您的 Windows 服务会容易得多。但是,您必须跟踪此实用程序的版本,该版本对应于您的开发框架。对于 Visual Studio 2005,需要使用 .NET Framework 2.0 版本的此实用程序。
如果您在同一台计算机上安装了多个版本的 Visual Studio,并且正在积极使用所有这些版本进行开发,您可能会拥有以下两个版本的此工具。请注意,根据您安装的框架的子版本,实际的版本文件夹名称可能会有所不同
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\InstallUtil.exe
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe
以下是使用此实用程序并安装您的服务所需的步骤
- 通过转到“开始 > 运行”,输入“cmd”并按“确定”按钮来启动命令提示符。
- 导航到上面与您用于开发 Windows 服务的 Visual Studio 版本对应的 .NET Framework 目录(VS 2003 使用 1.1,VS 2005 使用 2.0)。在我的情况下,这将是命令行的“c:”后跟“cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727”。
- 通过键入 InstallUtil "c:\[YOUR SERVICE EXE PATH]\MyWinService.exe" 来调用 Install Utility 来注册 Windows 服务。您的屏幕应该类似于此
运行服务的最后一步是从服务控件启动它。为此,请导航到“开始 > 控制面板 > 管理工具 > 服务”并启动服务控制器界面。向下滚动直到看到名称为“MyWinService”的服务。选择该服务,右键单击它,然后选择“属性”。
我们关心的两个重要选项卡是“常规”和“登录”选项卡。在“常规”选项卡上,您会看到一个名为“启动类型”的组合框,其中包含“手动”、“自动”和“禁用”选项。手动选项意味着服务不会在 Windows 启动时启动,而自动选项意味着服务在每次 Windows 启动时都会启动。单击“登录”选项卡。在这里,您可以更改服务运行所使用的用户。此时,您应该在此屏幕上看到您在 Install Utility 中输入的用户名。如果您宁愿在本地系统用户下运行服务,可以选择“本地系统帐户”单选按钮。单击“应用”以接受您的更改,然后单击返回到“常规”选项卡。通过在此选项卡上单击“开始”按钮来启动服务(或者,您可以通过右键单击服务名称并从提供的上下文菜单中选择“启动”来直接从服务控制器启动服务)。
事件日志条目
通过启动我们自定义的 .NET 服务,会在应用程序日志下创建新的事件日志条目。要查看此日志的事件,请转到“开始 > 控制面板 > 管理工具 > 事件查看器”,然后在事件查看器左侧菜单上选择“应用程序”日志部分。
这标志着本文第二部分的结束。第三部分将有更多内容。
Pete Soheil
DigiOz Multimedia
http://www.digioz.com/