转载:http://sunday.blog.51cto.com/360410/94315

本文将较为详细的介绍如何在.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 YourServiceNamecopy /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方法.则只能通过其他的项目来调试.具体见这篇文章的介绍.
实际上,我们可以直接在OnStart()方法中通过EventLog.WriteEntry("Hi,I'm wiseman");来向事件查看器中写入一些你感兴趣的信息,很大程度上可以解决debug的问题.
事件查看器在  我的电脑-->右键管理-->系统工具-->事件查看器
本文到此结束,大致的介绍了下如何在.net下编写windows服务程序,以及一些相关的技巧.该文也是阅读我之后的某些文章需要掌握的知识,这个月我会尽量抽些时间多写几篇有关Windows服务和企业服务以及Remoting技术综合起来的应用的文章
更多参考:
http://www.dotblogs.com.tw/yc421206/archive/2009/03/24/7675.aspx
http://support.microsoft.com/kb/816169/zh-cn
http://www.cnblogs.com/fineboy/archive/2005/08/12/213462.html
引用一句:
windows服务很好,很强大,我的每天发送邮件,每天定时通过ftp备份网站数据都是用的window服务

转载于:https://www.cnblogs.com/0banana0/archive/2012/05/11/2495871.html

c#开发Windows服务程序指南相关推荐

  1. c#开发Windows服务程序及部署

    Windows服务程序通常是一种在OS的后台长期运行的程序,根据需要你可以设置为随服务器启动而同时启动等等,在传统的C/S结构的程序开发中,Windows服务更是以Server端普遍存在.在.NET应 ...

  2. .NET开发Windows服务

    一.概述 本文旨在简单论述如何开发Windows服务程序. 服务名称:ServiceTest 实验环境:VS2015 最终程序结构: 二.步骤 1.创建一个项目,选择Windows 服务,更改项目名称 ...

  3. C#使用Topshelf和Quartz开发处理定时任务的Windows服务程序

    C#使用Topshelf框架和Quartz开发处理定时任务的Windows服务程序 背景 依赖 C#代码示例 任务调度的配置文件 测试 服务安装.启动.停止.卸载 背景 有些业务是运行在后台,需要界面 ...

  4. 【教程】Windows下Miniconda+Pytorch+Pycharm开发环境搭建指南

    Windows下Miniconda+Pytorch+Pycharm开发环境搭建指南 给本科生写的新手教程,遇到很多新手的共性问题,可供大家参考.在开始阅读之前,请注意两个要关键:1.为什么要使用Con ...

  5. 利用vs.net快速开发windows服务(总结)

    引用 http://www.cnblogs.com/lovecherry/archive/2005/03/25/125527.html 在很多应用中需要做windows服务来操作数据库等操作,比如 ( ...

  6. linux启动nifi指令,Nifi 组件脚本开发 - ExecuteScript 使用指南 (二)

    Nifi 组件脚本开发 - ExecuteScript 使用指南 (二) 浅谈 Java 的反射原理 摘要: Java 的编译过程 谈及反射, 不得不先了解一下, java 的整个编译过程, 整体的 ...

  7. HarmonyOS 开发避坑指南

    Harmony OS 开发避坑指南--源码下载和编译 本文介绍了如何下载鸿蒙系统源码,如何一次性配置可以编译三个目标平台(Hi3516,Hi3518和Hi3861)的编译环境,以及如何将源码编译为三个 ...

  8. 微软Patterns Practices发布Windows Azure指南第三部分——构建混合应用

    2月8日,微软Patterns & Practices发布了Windows Azure指南的第三部分--在Windows Azure云中构建混合应用,其中包括指南文档和源代码包. " ...

  9. 多线程、方便扩展的Windows服务程序

    多线程.方便扩展的Windows服务程序 吴剑 2012-06-02 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian/ 前言 在项目应用中经常会碰到定时调度的 ...

最新文章

  1. Mybatis Generator的使用
  2. MaxScript Slider/Timer
  3. 使用Retrofit的方式请求Socket,且Socket可以和Http无缝切换
  4. UE4学习-鼠标事件(按下、释放、物体抓取、计算重量、触发开门)
  5. hibernate优化笔记(随时更新)
  6. java httputil_Java网络编程与NIO详解2:JAVA NIO 一步步构建IO多路复用的请求模型
  7. 苹果11如何设置9宫格_iphone九宫格如何设置 iphone九宫格设置方法【详解】
  8. 【mysql union all limit的使用】
  9. 《Java并发编程实战》【第四部分 高级主题】
  10. otf VS ttf images
  11. python爬虫爬取网站视频
  12. css怎么设置图片卷角效果,用css3制作纸张效果(外翻卷角)
  13. 联合省选 2021 解题报告
  14. 上经 -- 乾【卦一】乾为天(一)
  15. AR儿童绘本技术实现
  16. B/S模式下的MVC架构迭代(2)
  17. VB中ByVal和ByRef
  18. Linux防火墙入门:简介(转)
  19. [转载]OJB在MySQL平台的配置
  20. QT/C++从新手到老手系列之QT基础篇-李浩林-专题视频课程

热门文章

  1. 双正交小波基 BWT
  2. Linux远程连接工具FinalShell使用
  3. 神经网络模型优化方法(缓解过拟合)
  4. UTF-8/UTF-16/UTF-32、Unicode和GB18030编码的关系
  5. 博学笃志 追求卓越--献给研究生的12条忠告与建议--来源:《学位与研究生教育》2006年第三期
  6. 10个简洁的Python编码技巧
  7. nodejs express 启动报错:Error: Cannot find module 'xxx'
  8. lasso特征选择python_[机器学习] 特征选择简明指南
  9. 世界各国的会计年度、记账本位币
  10. 动画开发 之 Lottie