zoukankan      html  css  js  c++  java
  • .net开发windows服务

    最近一个月都异常的繁忙,项目进度非常的紧,回头看看自己的blog,整整一个5月都没有一篇文章,非常惭愧,现在补几篇文章,介绍一下我最近关注的技术.这篇文章将介绍Windows服务程序的开发.
    摘要:
    本文将较为详细的介绍如何在.net下开发Windows服务程序,并将简要介绍一些开发中的调试技巧及后期的部署问题.
    IDE:VS2005, DotNetFramework Version:2.0.50727

    Windows服务程序通常是一种在OS的后台长期运行的程序,根据需要你可以设置为随服务器启动而同时启动等等,在传统的C/S结构的程序开发中,Windows服务更是以Server端普遍存在.在.NET应用程序中,无论是Winform下的应用还是ASP.NET,Windows服务也都非常重要,比如我们可以把一个.Net Remoting服务端封装在一个windows服务中,来达到稳定提供服务的目的.

    切入正题,首先我们来了解如何在VS下开发基于.Net的windows服务.
    实际上,在VS下建立一个windows服务程序非常的简单,微软帮我们做了80%的工作,我们所需要做的只是处理那20%的业务工作.
    首先,我们建立一个Windows Service程序,VS提供了现成的项目模版,选择Files->New->Project->Windows->Windows Service

    之后,你将获得两个文件Service组件和Program.cs.我们要建立服务的话,首先需要添加专用的安装组件,这步同样很简单,选择服务组件,并切换到设计模式,右键->Add Installer,生成了了安装文件,切换到设计模式,这里你将看到两个组件:ServiceInstaller和ProcessInstaller,这里没有太多需要说明的,大部分是对服务的名称,描述等信息的设置,只有2个地方需要注意下.一个是StartType,有三种选择自动,手动,禁用.如果想要自动启动,那么遍选择Automatic即可.另一个需要注意的属性是Account,选择用户,一般情况下,我们选择Local System即可.

    到现在,如果我们想要建立一个服务,实际上已经结束了,只需要在服务组件的OnStart和OnStop等函数中加上个人的业务处理.在Program.cs文件中,是如下代码:

            static void Main()
            {
                ServiceBase[] ServicesToRun;

                // More than one user Service may run within the same process. To add
                
    // another service to this process, change the following line to
                
    // create a second service object. For example,
                
    //
                
    //   ServicesToRun = new ServiceBase[] {new Service1(), new MySecondUserService()};
                
    //
                ServicesToRun = new ServiceBase[] new Service1() };

                ServiceBase.Run(ServicesToRun);
            }

    这段代码用于启动服务.

    接下来的工作就是安装服务.你可以通过制作安装包实现,或者直接通过命令行来执行安装.

    当你编译完项目后,你可以在bin/debug目录下看到扩展名为.exe的可执行文件,这就是服务程序,但直接双击是无法运行的,你需要通过特定的工具来安装它,微软提供给我们的工具就是installutil.exe.这个程序位于%SystemRoot%Microsoft.NETFramework/%Version%\,version指的是.net版本号.
    安装一个服务程序,我们是在命令行内键入:installutil.exe  服务程序路径.如果是要删除某个服务则是installutil.exe /u 服务程序路径.
    执行了安装操作后,我们去控制面版->管理工具->服务中就可以看到我们的服务程序了.

    最后,谈谈调试中的技巧.
    编写这种服务程序,调试起来非常的麻烦,而且每次有所变化后,还得频繁的去执行installutil和installutil /u命令,实际上,我们可以通过编写一些BuildEvents来大大简化这其中的烦琐工作.这里,我们在BuildEvents编写如下事件:
    net stop YourServiceName
    copy /y "$(TargetDir)" "$(ProjectDir)bin"
    "%SystemRoot%Microsoft.NETFrameworkv2.0.50727InstallUtil.exe" /u $(ProjectDir)bin$(TargetFileName)
    "%SystemRoot%Microsoft.NETFrameworkv2.0.50727InstallUtil.exe"  $(ProjectDir)bin$(TargetFileName)
    net start YourServiceName
    简单解释下:
    停止当前服务->把debug目录下所有东西copy到bin目录下->执行反安装操作->执行安装操作->启动服务.
    最后把该事件设置为OnSuccessfulBuild即可.

    由于是服务程序,如果想要直接debug比较的麻烦,可以通过附加进程来调试大多数代码,但是如果想要调试OnStart和OnStop方法.则只能通过其他的项目来调试.具体见这篇文章的介绍.http://leonkim.bokee.com/1857046.html
    实际上,我们可以直接在OnStart()方法中通过EventLog.WriteEntry("Hi,I'm wiseman");来向事件查看器中写入一些你感兴趣的信息,很大程度上可以解决debug的问题.

    本文到此结束,大致的介绍了下如何在.net下编写windows服务程序,以及一些相关的技巧.该文也是阅读我之后的某些文章需要掌握的知识,这个月我会尽量抽些时间多写几篇有关Windows服务和企业服务以及Remoting技术综合起来的应用的文章.

    来源:http://www.cnblogs.com/wuxilin/archive/2006/06/04/416838.html

  • 相关阅读:
    1、编写一个简单的C++程序
    96. Unique Binary Search Trees
    python 操作redis
    json.loads的一个很有意思的现象
    No changes detected
    leetcode 127 wordladder
    django uwsgi websocket踩坑
    you need to build uWSGI with SSL support to use the websocket handshake api function !!!
    pyinstaller 出现str error
    数据库的读现象
  • 原文地址:https://www.cnblogs.com/gjhjoy/p/3494410.html
Copyright © 2011-2022 走看看