最近一个月都异常的繁忙,项目进度非常的紧,回头看看自己的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.NET\Framework\/%Version%\,version指的是.net版本号.
安装一个服务程序,我们是在命令行内键入:installutil.exe  服务程序路径.如果是要删除某个服务则是installutil.exe /u 服务程序路径.
执行了安装操作后,我们去控制面版->管理工具->服务中就可以看到我们的服务程序了.

最后,谈谈调试中的技巧.
编写这种服务程序,调试起来非常的麻烦,而且每次有所变化后,还得频繁的去执行installutil和installutil /u命令,实际上,我们可以通过编写一些BuildEvents来大大简化这其中的烦琐工作.这里,我们在BuildEvents编写如下事件:
net stop YourServiceName
copy /y "$(TargetDir)" "$(ProjectDir)bin"
"%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe" /u $(ProjectDir)bin\$(TargetFileName)
"%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\InstallUtil.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

.net开发windows服务的更多相关文章

  1. 使用Visual Studio 2015 Community 开发windows服务

    昨天研究在.NET下开发Windows服务程序,期间遇到一些小问题,这里仅将自己的开发过程和需要注意的地方写下和广大网友分享……  1.基础   Windows服务是指系统启动时能够自己运行的程序.W ...

  2. C#开发Windows服务 附简单实例实现禁止QQ运行

    本实例主要实现下面三个基本功能 1.C#开发windows服务 2.禁止QQ等程序运行 3.为windows服务创建自动安装程序 下面针对这三个基本功能进行实现 一.C#开发windows服务 Win ...

  3. VS2013开发Windows服务项目

    这篇随笔里,我将介绍如何用VS2013开发Windows服务项目,实现的功能是定时发送电子邮件. 开发环境:VS2013,SQL Server2008,采用C#语言开发 步骤一:创建Windows服务 ...

  4. C#开发Windows服务详细流程

    1.Windows服务简单介绍 Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序,主要用于长时间运行的功能或者执行定时任务.一般情况下,用户不能通过用户界面来安装和启 ...

  5. 使用Topshelf开发Windows服务、log4net记录日志

    开发windows服务,除了在vs里新建服务项目外(之前有写过具体开发方法,可点击查看),还可以使用Topshelf. 不过使用topshelf需要.netframework 4.5.2版本,在vs2 ...

  6. 开发Windows服务

          在开发Windows服务时需要注意一点,如果在开发完成后,需要通过命令来进行安装的,那么在开发的时候,需要在服务类上面添加一个安装文件.如下图:               添加完成后,就 ...

  7. c#金额转换成中文大写金额 .Net开发Windows服务

    c#金额转换成中文大写金额   2018-08-24 转别人 c#金额转换成中文大写金额 /// <summary> /// 金额转换成中文大写金额 /// </summary> ...

  8. C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库

    C# DateTime的11种构造函数   别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...

  9. C#开发windows服务如何调试——资料整理

    原文标题:C# Windows服务程序如何进行调试 原文地址:https://jingyan.baidu.com/article/456c463b18e1b00a583144b3.html 第一种: ...

  10. C#常规开发Windows服务

    .Net平台下开发Windows服务的支持库很多,除了通过标准的Windows服务项目,还有一些优秀的开源架构比如:TopSelf:本文以常规项目为例 一.开发 1.新建[Windows服务] 项目: ...

随机推荐

  1. wpf 自定义依赖性属性 作用之一 对数据绑定的支持

    依赖属性:定义,声明,注册 依赖属性,在数据绑定中,数据绑定,分为源对象(数据源)和目标对象(显示数据). 只有源对象为依赖对象,属性为依赖属性时,该属性才会在属性发生变化时,通知目标对象进行数据更改 ...

  2. JavaScript之闭包与高阶函数(一)

    JavaScript虽是一门面向对象的编程语言,但同时也有许多函数式编程的特性,如Lambda表达式,闭包,高阶函数等. 函数式编程是种编程范式,它将电脑运算视为函数的计算.函数编程语言最重要的基础是 ...

  3. C#中HashTable的用法示例1

    一,哈希表(Hashtable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中 ...

  4. 如何注册dll、ocx控件

    在程序集成时,有时需要对厂家提供的dll或者ocx控件进行注册.其一般操作为:开始>命令指示符(右击管理员身份运行)>regsvr32 文件路径. 比如对devocx.ocx进行注册,在F ...

  5. HTML5 Shiv – 让该死的IE系列支持HTML5吧(转)

    摘自: http://www.cnblogs.com/yuzhongwusan/archive/2011/11/17/2252207.html HTML5能为我们做的事儿很多,最为可口的就是语义化标签 ...

  6. eclipse GWT开发环境的离线布置方法

    安装方法http://blog.csdn.net/u011029071/article/details/10143841 用eclipse自动更新安装失败N次,还是得手动来 以Google Plugi ...

  7. HDU 2069 Coin Change

    Coin Change Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...

  8. oracle中 sql%rowcount 使用方法

    sql%rowcount用于记录改动的条数,必须放在一个更新或者删除等改动类语句后面运行,select语句用于查询的话无法使用, 当你运行多条改动语句时,依照sql%rowcount 之前运行的最后一 ...

  9. android生成验证码bitmap

    不多说了,直接上代码,项目中用到的,未做优化,还有很多参数未设置. [java] view plaincopy 1.import java.util.Random; 2. 3.import andro ...

  10. TopCoder SRMS 1 字符串处理问题 Java题解

    Problem Statement   Let's say you have a binary string such as the following: 011100011 One way to e ...