C#Windows服务程序开发实例浅析

c#客户端与服务器端的开发经典案例 vs2010开发,可以找到解决方案直接运行。 立即下载

C#Windows服务程序开发实例:编写一个C#Windows服务程序,定时从数据库中拿出记录发送邮件。

测试环境:Visual Studio 2005 SP1、Windows Server 2003 SP2

C#Windows服务程序开发实例一、新建项目

打开VS2005,新建一个“Windows 服务”项目。

C#Windows服务程序开发实例二、添加Timer

展开“工具箱”,在“组件”标签下找到“Timer”双击,这时就添加了一个Timer组件,修改“Name”属性为“timEmail”、 “Enabled”为“false”、“Interval”为“60000”。

接下来要做一些修补工作,不知是VS2005的BUG还是我没找着地方,在VS2003下是不存在该问题的:刚从“组件”下添加的“Timer”按 理说应该来自“System.Timers命名空间”,也只有“System.Timers.Timer”才能在Windows服务程序中正常工作,但是 现在这个Timer却是属于“System.Windows.Forms.Timer”的。所以得稍作修改,打开“.Designer.cs”文件,修改 如下:

  1. #region 组件设计器生成的代码  
  2. //........以上略  
  3. /// <summary>   
  4. /// 设计器支持所需的方法 - 不要  
  5. /// 使用代码编辑器修改此方法的内容。  
  6. /// </summary>  
  7. private   void  InitializeComponent()  
  8. {  
  9.      this .components =  new  System.ComponentModel.Container();  
  10.      //this.timEmail = new System.Windows.Forms.Timer(this.components);原  
  11.      this .timEmail =  new  System.Timers.Timer(); //改  
  12.      this .timEmail.Interval = 60000;  
  13.      this .ServiceName =  "Service1" ;  
  14. }  
  15. #endregion  
  16. //private System.Windows.Forms.Timer timEmail;原  
  17. private  System.Timers.Timer timEmail; //改  

C#Windows服务程序开发实例三、添加配置文件

服务每次调用配置文件,获取一些基本参数,这样一些变更就可直接修改配置文件而不必修改代码。新建ServiceConfig.xml存放于项目 “Bin/Debug/”下:

  1. ﹤?xml  version = "1.0"   encoding = "utf-8"  ?﹥   
  2. ﹤serviceConfig﹥  
  3.     ﹤serviceItem   
  4. name = "sendEmail"    
  5. enable = "true"    
  6. elapsed = "60000"    
  7. connectionString = "your database connection..."    
  8. smtp = "smtp address"    
  9. account = "your email account..."    
  10. password = "your password..."  ﹥  
  11.     ﹤/serviceItem﹥  
  12. ﹤/serviceConfig﹥ 

C#Windows服务程序开发实例四、以下是实现代码

  1. using  System;  
  2. using  System.Collections.Generic;  
  3. using  System.ComponentModel;  
  4. using  System.Data;  
  5. using  System.Diagnostics;  
  6. using  System.ServiceProcess;  
  7. using  System.Text;  
  8. using  System.Xml; //操作配置文件  
  9. using  System.IO; //写日志  
  10. using  System.Threading; //使用线程  
  11.  
  12. namespace  ClientWindowsService  
  13. {  
  14.      public  partial  class  ClientService : ServiceBase  
  15.     {  
  16. public  ClientService()  
  17. {  
  18.     InitializeComponent();  
  19. }  
  20.  
  21. protected   override   void  OnStart( string [] args)  
  22. {  
  23.      //服务启动  
  24.        this .timEmail.Enabled =  true ;  
  25.      this .tSendEmail();  
  26. }  
  27.  
  28. protected   override   void  OnStop()  
  29. {  
  30.      //服务停止  
  31.        this .timEmail.Enabled =  false ;  
  32. }  
  33.  
  34. private   void  timEmail_Elapsed( object  sender,  
  35.  System.Timers.ElapsedEventArgs e)  
  36. {  
  37.      //定时器  
  38.        this .tSendEmail();  
  39. }  
  40.  
  41. //开启新进程发送邮件  
  42.      private   void  tSendEmail()  
  43. {  
  44.     Thread t =  new  Thread( new  ThreadStart(sendEmail));  
  45.     t.Start();  
  46. }  
  47.  
  48. //发送邮件函数  
  49.      private   void  sendEmail()  
  50. {  
  51.     XmlDocument doc =  new  XmlDocument();  
  52.      //添加System.Windows.Forms引用,获取执行目录  
  53.        string  configFile = System.Windows.Forms.Application.  
  54. StartupPath.ToString() +  "/ServiceConfig.xml" ;  
  55.     doc.Load(@configFile);  
  56.     XmlElement root = doc.DocumentElement;  
  57.      foreach  (XmlNode node  in  root)  
  58.     {  
  59. //如果配置文件中开启服务  
  60. if  (node.Attributes[ "name" ].Value ==  "sendEmail"  &&  
  61.  node.Attributes[ "enable" ].Value ==  "true" )  
  62. {  
  63.      try  
  64.     {  
  65. //读取数据库,发送邮件操作,略  
  66.     }  
  67.      catch  (Exception error)  
  68.     {  
  69. //写错误日志  
  70.      using  (StreamWriter sw =  new  
  71. StreamWriter(System.Windows.Forms.
  72. Application.StartupPath.ToString() + 
  73. @ ""  + DateTime.Now.ToString( "yyyy-MM-dd" ) + 
  74. ".txt" ,  true , System.Text.Encoding.UTF8))  
  75. {  
  76.     sw.WriteLine(DateTime.Now.ToString() +  ":" );  
  77.     sw.WriteLine(error.ToString());  
  78.     sw.WriteLine( "----------------
  79. -----------------------------" );  
  80.     sw.Close();  
  81. }  
  82.     }  
  83. }  
  84.     } //end foreach  
  85. }  
  86.  
  87.     } //end class  
  88. } //end namespace  

C#Windows服务程序开发实例五、布署服务

在设计模式下右键-->添加安装程序-->设置serviceProcessInstaller1的Account为 LocalSystem

设置serviceInstaller1的StartType为Automatic

编译

在命令模式下执行:%systemroot%/microsoft.net/framework/v2.0.50727 /installUtil.exe D:/项目目录/bin/Debug/可执行文件名.exe

在每次需要修改Windows服务时,这就会要求你卸载和重新安装这个服务。不过要注意在卸载这个服务前,最好确保服务管理控制台已经关闭,这会是 一个很好的习惯。如果没有这样操作的话,你可能在卸载和重安装Windows服务时会遇到麻烦。仅卸载服务的话,可以执行相的InstallUtil命令 用于注销服务,不过要在后面加一个/u命令开关。

调试Windows服务

从另外的角度度看,调试Windows服务绝不同于一个普通的应用程序。调试Windows服务要求的步骤更多。服务不能象你对普通应用程序做的那 样,只要简单地在开发环境下执行就可以调试了。服务必须首先被安装和启动,这一点在前面部分我们已经做到了。为了便于跟踪调试代码,一旦服务被启动,你就 要用Visual Studio把运行的进程附加进来(attach)。记住,对你的Windows服务做的任何修改都要对这个服务进行卸载和重安装。

附加正在运行的Windows服务

为了调试程序,有些附加Windows服务的操作说明。这些操作假定你已经安装了这个Windows服务并且它正在运行。

1. 用Visual Studio装载这个项目

2. 点击“调试”菜单

3. 点击“进程”菜单

4. 确保 显示系统进程 被选

5. 在 可用进程 列表中,把进程定位于你的可执行文件名称上点击选中它

6. 点击 附加 按钮

7. 点击 确定

8. 点击 关闭

9. 在timer1_Elapsed方法里设置一个断点,然后等它执行

C#Windows服务程序开发实例六、代码下载

http://files.cnblogs.com/linckle/log.rar

C#Windows服务程序开发实例的基本内容就向你介绍到这里,希望对你学习和了解C#Windows服务程序开发实例有所帮助。

C#开发的游戏服务器demo(C/S)案例,可运行。 用C#开发的游戏通信demo,现在能进行C/S通信,可以进行协议修改,修改成游戏通信框架。 立即下载

相关推荐

c#简单web服务器开发实例

c#简单web服务器开发实例,通过HttpListener来实现

c#开发和学习(c#编写windows服务)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 大家有没有想过一些程序,属于那种开机即启动的。比如说web服务器程序,mysql程序等等。但是呢,这些程序本身又没有任何的console对话框,所以这个时候就要把他们编写成windows服务程序。window服务本身也是一个exe文件,中间的一部分函数功能需要做override处理,正是这些override的函数保证了这个service可以接受外界command的输入。

嵌入式-老费,一个分享专业嵌入式知识的blog 4228

Unity轻量级框架QFramework:四层架构与命令事件驱动的实战指南

在Unity游戏开发中,软件架构是确保项目可维护性和可扩展性的核心。通过分层架构(如MVC、DDD)和事件驱动设计,开发者能够有效管理代码复杂度,实现模块间的解耦与高效通信。QFramework作为一个轻量级框架,精准地运用了这些原理,通过严格定义的四层架构(表现层、系统层、数据层、工具层)和命令/事件通信规则,为中小型项目提供了“约束下的自由”。其核心价值在于以极简的代码(不足1000行)强制实施清晰的职责分离,如使用命令模式集中管理状态变更,并通过事件驱动实现响应式更新。这种设计特别适用于解决项目规模扩

weixin_42521032的博客 262

C# 客户端服务器开发 基础学习

1、流程图   首先看一下C#中面向连接的套接字(TCP)的编程流程:    2、服务器建立连接、收发数据、关闭连接程序段:   1)建立连接 //创建本地套接字对象,IPV4寻址方式,基于TCP的Stream Socket(流式套接字0) Socket localSocket = new Socket(AddressFamily.InterNetwork, Soc...

baiwenmian6366的博客 279

ArcGISPro小白必看:5分钟搞定3D地形图制作(附免费数据源)

本文为ArcGISPro初学者提供5步制作专业3D地形图的完整指南,涵盖免费数据获取、项目初始化、数据预处理、3D场景构建和成果输出等关键步骤。特别推荐使用NASA的SRTM高程数据和吉林一号卫星影像,帮助用户快速掌握3D地形图制作技巧,适用于教学演示和科研分析。

weixin_28314575的博客 239

同济土木非0基础三个月跨考复旦计算机攻略

跨考cs攻略前言我cs专业课如何复习How to start from zero简历其他复试 前言 建议多去工地/化工厂涡轮增压一下 我 同济土木gpa 3.2/5 挂科 * n 辣鸡项目 * n (padding 简历) 21考复旦计算机专硕 10月-12月 学习+复习 总分392 政治 68;背肖4即可 英语二 78 裸考,(高考英语140+);做点真题,建议据自己情况准备 数学二 142 ;(高考数学接近满分);做真题+模拟题,每天写一张试卷 专业课 104 ,考试生病了,下文展开。 cs专业课

piglake的博客 7237

C#Windows服务程序的快速开发

C#Windows服务程序的快速开发向你介绍了在很多应用中需要做windows服务来操作数据库等操作,希望对你了解C#Windows服务程序的开发有所帮助。 C#Windows服务程序的快速开发:在很多应用中需要做windows服务来操作数据库等操作,比如(1)一些非常慢的数据库操作,不想一次性去做,想慢慢的通过服务定时去做,比如定时为数据库备份等(2)在.ne

jiangxinyu的专栏 1436

HyperLynx实战:手把手教你搞定DDR4信号完整性仿真(附ODT与终端电阻配置避坑)

本文详细介绍了使用HyperLynx进行DDR4信号完整性仿真的实战技巧,重点解析了ODT配置与终端电阻优化的黄金法则。通过模型准备、拓扑构建、ODT扫描等关键步骤,帮助硬件工程师规避常见设计陷阱,提升高速数字电路设计的效率与可靠性。

weixin_30861797的博客 639

C#Windows服务程序开发浅析

C#Windows服务程序开发的前言:最近写了一个程序,需要在服务器上运行,编完了以后,到服务器运行,发现,用远程登陆打开这个程序,没有问题,可是过了十分钟,远程服务器自动注销了,程序也就终止。这样,程序就不能正常工作。想了一天多的办法,终于在今天把这个问题解决了。 C#Windows服务程序开发步骤一:首先用.net写个服务 新建一个服务,在设计页面上点右键,出现菜单后,选择添加安装程序。这

ShuLiu's Log Book 1270

【Lane】 Ultra-Fast-Lane-Detection 复现

引言 车道线检测源码复现以及训练自己的数据集 1 环境搭建 conda create -n lane python=3.7 conda activate lane # 激活环境 conda install pytorch torchvision cudatoolkit=10.1 -c pytorch pip install -r requirements.txt 2 下载项目源码 若在服务器上可以用指令下载,否则直接在网址中下载 git clone https://github.com/cfzd/U

qq_44703886的博客 2万+

PCB铺铜技巧如何铺铜经验总结

铺铜是指在PCB电气层添加整块的铜皮;铺铜包括电源层铺铜,地层铺铜和信号走线层空闲区域铺铜;铺铜是PCB设计的一个重要的环节。

fydar的博客 1万+

C#Windows服务程序安装

C#Windows服务程序安装是如何的呢?让我们开始吧: C#Windows服务程序安装1、 在服务程序的是设计窗体中,点击右键“添加安装程序”,添加服务安装程序。否则,安装时会出现如下 错误: 正在安装程序集“C:\Program\xx.exe”。 受影响的参数是: logtoconsole= assemblypath=C:\Program\xx\xx.exe ...

weixin_30614587的博客 208

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的生活垃圾检测与分类系统(Python+PySide6界面+训练代码)

随着城市化进程的加速和人口增长,生活垃圾管理已成为现代城市面临的重要挑战。传统的垃圾处理方法效率低下且成本高昂,急需智能化解决方案。本文详细介绍了基于YOLO系列算法(特别是YOLOv8)的智能生活垃圾检测与分类系统,该系统能够实时识别和分类多种生活垃圾,为智能垃圾处理和回收提供技术支持。系统包含完整的数据集构建、模型训练、评估和可视化界面,并提供了完整的实现代码。

YOLO 117

编写一个C#Windows服务程序,定时从数据库中拿出记录发送邮件。

C#Windows服务程序开发实例:   测试环境:Visual Studio 2005 SP1、Windows Server 2003 SP2   C#Windows服务程序开发实例一、新建项目   打开VS2005,新建一个“Windows 服务”项目。   C#Windows服务程序开发实例二、添加Timer   展开“工具箱”,在“组件”标签下找到“Timer”双击,这时就添加了

nieweiking的博客 9693

R数据分析:潜在转化分析LTA的做法和解释(一)

之前给大家写了很多潜在类别分析的教程Mplus教程:如何做潜在类别分析LCAR数据分析:用R语言做潜类别分析LCAMplus数据分析:潜在类别分析(LCA)流程(详细版)R数据分析:再写潜在类别分析LCA的做法与解释,今天继续给大家拓展一步。 今天要介绍的就是潜在转换分析,这个东西就是LCA的纵向版本。是一个专门用来研究质变的统计技巧。有一句话叫做量变起质变,你怎么知道质变到底发生没有?就用潜在转换分析。 Latent transition analysis is an extension of...

Codewar的博客 7703

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C#Windows服务程序开发实例程序

C#Windows服务程序开发实例程序的目的和用途: 很多开机启动程序仅仅加在启动项里面,只有登陆后才真正启动。windows服务在开机未进行用户登录前就启动了。正是利用这一点,解决一些服务器自动重启后特定软件也自动启动的问题。 C#Windows服务程序开发1. 新建一个服务项目 visual C#----windows----windows服务; C#Windows服务程序开发2. ...

weixin_30537391的博客 105

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C#Windows服务程序开发之Windows服务浅析

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34061042的博客 182

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C#windows服务连接SQL Server数据库,实例失败。

C# windows服务连接SQL Serv er数据库

程序员思维的博客 1857

C#Windows服务程序编写

C#Windows服务程序编写是如何实现的呢? C#Windows服务程序编写是一种比较高级的编程技术,内部使用了很多Windows操作系统的核心功能,但微软.NET框架已经很好的封装了这些技术细节,使得我们可以很方便的使用C#编写自己的Windows服务,其基本过程一般为 Windows服务程序编写1.创建C#工程。 创建一个EXE工程,可以是WinForm或者命令行格式的。添加对S...

emowuyi 168
上一篇: 用Visual C#创建Windows服务程序
hh_longke
博客等级 码龄18年 5粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值