[From Network]用C#创建Windows Service (1)

  现在的.NET 框架已经为 Windows service 的开发提供足够强大的支持 , 你只需要关注 service 所要实现的逻辑 , 而完全不用关心 service 底层是如何实现的 , 相比以前用 MFC 来说 , 真是质的飞跃啊。闲话少谈,看看如何实现一个最基本的 windows service ,以及如何来调试 windows service
   
打开 VS 2005 ,点击 File->New->Project…., 在创建工程向导中选择 Windows service 模板 ,在工程名输入框中,输入 TestService 然后点击 OK VS 为我们生成了最基本的代码,我们将 Service 的名称改为我们期望的名称,在 solution explorer 中右键点击 vs 自动生成的 service 文件 “Service1.cs”, 在弹出的菜单中选择 Rename ,输入 “MyFirstService” ,然后切换到设计视图,也就是在 solution explorer 中双击 MyfirstService.cs ,在 Property Explorer 中将 ServiceName 属性改为 MyFirstService, 这时一个可运行的 windows service 已经创建成功。我们添加一些代码来测试一下这个 service ,最简单的测试方式就是向 windows event log 里来添加一些消息以显示我们的 Service 的状态。
   
我们需要一个 EventLog 组件向 windows log 中添加信息,在 solution explorer 中双击 MyfirstSerice 文件切换到设计视图,将工具箱中的 EventLog 组件拖到设计视图中,我们保留 EventLog 组件的默认名称 eventLog1 。选中 eventLog1 ,在 property explorer 中将 Log 属性选为 Application ,在 Source 属性中输入 “MyFirstService” 。接下来,我们在设计视图的空白处,右键点击,并选择 View Code 切换到代码视图,在 OnStart OnStop 方法里输入代码实现日志写入,代码如下:    

        protected override void OnStart(string[] args)
        
{
            
// TODO: Add code here to start your service.
             eventLog1.WriteEntry("Service start");
             }

          protected override void OnStop()
        
{
            
// TODO: Add code here to perform any tear-down necessary to stop your service.
             eventLog1.WriteEntry("Service stop");
              }


    要运行这个service我们还要做下边的几个步骤:
    1.为我们的Service添加Installer,右键点击设计视图,选择Add Installer,VS将会为我们添加ProjectInstaller.cs,并在ProjectInstaller中添加组件serviceInstaller1和serviceProcessInstaller1,现在我们来修改他们的属性来控制Service的安装和启动选项。在ProjectInstaller得设计视图中选中serviceProcessInstaller1,将它得Account属性选为LocalSystem,这样以这个帐号服务启动。如果你希望系统启动时自动启动服务得话,将serviceInstaller1的StartType的属性选为Automatic,如果手动启动的话,选为manaul。
    2.安装service,我们要用到IntallUtil.exe这个程序,这个程序位于C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727。点击开始菜单,选择“运行”,在运行对话框中输入cmd,进入到命令行窗口,输入cd :/WINDOWS/Microsoft.NET/Framework/v2.0.50727,进入到这个目录,然后输入installutil F:/Programs/C#/TestService/TestService/bin/Debug/testserveice.exe, installutil后边的内容就是我们的工程生成的可执行程序的路径,情根据需要修改。
    如果你给ServiceInstaller1的StartType设为Automatic的话,安装完服务,服务已经运行起来了,如果StartType是Manual的话,你需要手动启动。现在我们进入“服务”,要打开“服务”,请单击“开始”,指向“设置”,然后单击“控制面板”。依次单击“性能和维护”、“管理工具”,然后双击“服务”。在里边你应该能够看到我们制作的Service MyFirstService。在这里边,我们可以启动,关闭服务,还可以设置服务的启动类型。然后,我们看看服务有没有正确的写入日志,我们需要进入到事件查看器,要打开“事件查看器”,请单击“开始”,指向“设置”,然后单击“控制面板”。单击“性能和维护”,单击“管理工具”,然后双击“事件查看器”。如下图所示,我们的消息已经成功的写到了系统日志里了。
   
    如果你不需要这个Service了,仍然使用InstallUtil这个程序来卸载,不过在InstallUtil后跟参数 –u,比如installutil –u F:/Programs/C#/TestService/TestService/bin/Debug/testserveice.exe。
    Service的调试方法与普通的程序调试方法是不一样的。我来介绍一下。
    1.Build你的项目
    2.设置断点,因为我们的Service非常的简单,没有什么执行逻辑,所以设置断点没有任何意义,大家可以自己写一些代码来实践。一般来说,我们服务里需要用到一个另外的线程来执行任务,你需要在线程的执行代码中来设置断点。
    3.安装service,我们前边有介绍如何安装。
    4.如果你的Service启动类型是手动(Manual),你需要到“服务”里启动你的Service。一般来说,如果你的service在开发阶段,我推荐你将Service的启动类型设置为Manual,这样便于调试,因为如果service在运行过程中,你将无法build工程。   
    5.在VS中,从菜单中选择Debug->Attach Process….里边列出了正在运行的进程,如果你找不到自己的service,请选中Show processes from all users。在Available processes列表中选中我们的service所在的进程TestService,然后点击Attach按钮,如果你设置的断点合理的话,那么,程序就会停在断点处,接下来你就可以进行调试了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值