返回顶部
首页 > 资讯 > 精选 >怎么用C#实现Windows后台服务
  • 228
分享到

怎么用C#实现Windows后台服务

2023-06-17 23:06:21 228人浏览 独家记忆
摘要

这篇文章主要讲解了“怎么用C#实现windows后台服务”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用C#实现Windows后台服务”吧!C#实现Windows后台服务实例之前要明白的

这篇文章主要讲解了“怎么用C#实现windows后台服务”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用C#实现Windows后台服务”吧!

C#实现Windows后台服务实例之前要明白的一些概念:所谓Windows后台服务,即后台自动运行的程序,一般随操作系统启动而启动,在我的电脑 服务后应用程序 服务里面能看到当前电脑的服务.一般而言,程序上用VC、c++写Windows服务,但是我对这些语言不是很熟,一般编程用C#较多,所以就用C#语言写了一个Windows服务.

C#实现Windows后台服务实例其实需求是这样的,做那个报价系统的时候加入了发短信的功能,订单处理完即将发货的时候要发送短信都客户手机上,公司内部员工处理订单超时要自动发短信,群发产品促销信息到客户手机上等,还有定时发送短信的需求,所以***面决定把发短信的模块独立出来,以后还有什么功能方便一起调用,而最终选择了采用Windows后台服务.

C#实现Windows后台服务实例其实Windows服务并不好做到通用,它并不能在用户的界面显示一些什么信息等,它只是在后台默默的处理一些事情,起着辅助的作用.那如何实现发送段信通用调用的接口呢?它们之间的信息又是如何来交互呢?数据库!对,就是它存储数据信息的.而数据库都能很方便的访问操作.把发送短信的后台服务定时去访问一个数据库,而另外任何要发送短信的地方也访问数据库,并插入一条要发送的短信到表里面,稍后Windows后台服务访问该表将此短信发送出去.这可能是一个比较蠢的方法,但实现起来较简单.

C#实现Windows后台服务实例首先,由于它是要安装的,所以它运行的时候就需要一个安装类Installer将服务安装到计算机,新建一个后台服务安装类继承自Installer,安装初始化的时候是以容器进行安装的,所以还要建立ServiceProcessInstaller和ServiceInstaller服务信息组件添加到容器安装,在Installer类增加如下代码:

private System.ComponentModel.IContainer components = null;  private System.ServiceProcess.ServiceProcessInstaller spInstaller;  private System.ServiceProcess.ServiceInstaller sInstaller;  private void InitializeComponent()  {  components = new System.ComponentModel.Container();   // 创建ServiceProcessInstaller对象和ServiceInstaller对象  this.spInstaller = new System.ServiceProcess.ServiceProcessInstaller();  this.sInstaller = new System.ServiceProcess.ServiceInstaller();   // 设定ServiceProcessInstaller对象的帐号、用户名和密码等信息  this.spInstaller.Account = System.ServiceProcess.ServiceAccount.LocalSystem;  this.spInstaller.Username = null;  this.spInstaller.PassWord = null;   // 设定服务名称  this.sInstaller.ServiceName = "SendMessage";  sInstaller.DisplayName = "发送短信服务";  sInstaller.Description = "一个定时发送短信的服务";   // 设定服务的启动方式  this.sInstaller.StartType = System.ServiceProcess.ServiceStartMode.Automatic;   this.Installers.AddRange(new System.Configuration.Install.Installer[] { this.spInstaller, this.sInstaller });  }

C#实现Windows后台服务实例再添加一个服务类继承自ServiceBase,我们可以重写基类的OnStart、OnPause、OnStop、OnContinue等方法来实现我们需要的功能并设置指定一些属性.由于是定事发送短信的服务,自然少不了Windows记时器,在OnStart事件里我们写入服务日志,并初始化记时器.

private System.Timers.Timer time;  private static readonly string CurrentPath = Application.StartupPath + "\\";  protected override void OnStart(string[] args)  {  string path = CurrentPath + "Log\\start-stop.log";  FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write);  StreamWriter sw = new StreamWriter(fs);  sw.WriteLine("The Service is Starting On " + DateTime.Now.ToString());  sw.Flush();  sw.Close();  fs.Close();   time = new System.Timers.Timer(1000 * Convert.ToInt32(GetSettings("TimeSpan")));  time.Enabled = true;  time.Elapsed += this.TimeOut;  time.Start();  }

C#实现Windows后台服务实例实例化记时器类启动后,将在指定时间间隔触发Elapsed指定事件,如上GetSettings为读取我App.config文件里一个配置节点(值为30)的方法,所以上面将会每隔30秒调用TimeOut方法.而改方法就是我们发短信的具体操作.代码如下:

private void TimeOut(object sender, EventArgs e)  {  try {  if (GetSettings("Enabled").ToLower() == "true")  {  sqlConnection con = new SqlConnection(GetSettings("ConnString"));  SqlCommand cmd = new SqlCommand("select [sysid],[admin_inner_code],[user_inner_code],[phone],[message],[sendtime] from [tbl_note_outbox]", con);  con.Open();  SqlDataReader rdr = cmd.ExecuteReader();  while (rdr.Read())  {  string phone = rdr["phone"].ToString();  string message = rdr["message"].ToString();  string sendtime = rdr["sendtime"].ToString();  System.Text.Encoding encoder = System.Text.Encoding.GetEncoding("GB2312");  string url = string.FORMat("Http://211.155.23.205/isapi.dll?SendSms&AgentID={0}&PassWord={1}&phone={2}&msg={3}&sendtime={4}", GetSettings("AgentID"), GetSettings("PassWord"), phone,System.WEB.HttpUtility.UrlEncode( message,encoder), sendtime);  System.net.WebClient wClient = new System.Net.WebClient();  string msg = System.Text.Encoding.Default.GetString(wClient.DownloadData(url));  wClient.Dispose();   //删除已经发送成功的,并保存发送记录  if (msg == "发送成功")  {  DateTime dtsend = sendtime == "0" ? DateTime.Now : DateTime.ParseExact(sendtime, "yyyyMMddHHmmss", null);  string sql = string.Format("delete from [tbl_note_outbox] where [sysid]={0} INSERT INTO [tbl_note_log] ([admin_inner_code],[user_inner_code],[status],[phone],[message],[sendtime]) VALUES('{1}','{2}','{3}','{4}','{5}','{6}')", rdr["sysid"], rdr["admin_inner_code"], rdr["user_inner_code"], msg, phone, message, dtsend);  SqlConnection conn = new SqlConnection(GetSettings("ConnString"));  SqlCommand delete = new SqlCommand(sql, conn);  conn.Open();  delete.ExecuteNonQuery();  conn.Close();  delete.Dispose();  }   }  rdr.Close();  con.Close();  cmd.Dispose();  }  }  catch (Exception ex)  {  string errorPath = CurrentPath + "Log\\error.log";  if (!File.Exists(errorPath))  {  FileStream create = File.Create(errorPath);  create.Close();  }  FileStream fs = new FileStream(errorPath, FileMode.Append, FileAccess.Write);  StreamWriter sw = new StreamWriter(fs);  sw.WriteLine("Exception: " +ex.Message+" --"+ DateTime.Now.ToString());  sw.Flush();  sw.Close();  fs.Close();  }   }

C#实现Windows后台服务实例上面我们使用try、catch访问数据库,并记录错误异常信息. 发送短信是使用发送一个Web请求发送出去的,要注意请求url字符串的编码类型,要与请求页面编码一致,不然会出现乱码.上面我们请求的是智网通集团短信(网址:http://www.09168.net/)的Web接口,通过访问他的网站来实现发短信,当然还要传递一些用户名、密码、手机号码和要发送的短信息等参数.他的收费平均大概为7分/条的样子,其实我原本不想用发送Web请求的这样方式来发送短信的,它本身提供了调用它发送短信的DLL,而且还有vc、delphi调用的Demo,但是没有用C#调用的例子,我刚开始试着用非托管动态链接库他提供的DLL,不知方法调用那里出错了一直都没能成功发送出短信,所以后来就用了他的Web方式接口了.他页面直接返回发送短信的状态信息.返回发送成功则短信发送成功,成功后我再将此条信息从要发送短信表里删除并保存在发送记录表里面,以备日后方便查询.其实登陆他的官网进入后台也能方便的查询,如下图.

怎么用C#实现Windows后台服务

C#实现Windows后台服务实例发送短信服务的代码基本上搞定了,就看怎么在服务器上安装部署了.C#写的Windows后台服务不能直接安装,需要借助.NET Framework里面的InstallUtil.exe安装工具安装,我们可以做成一个执行CMD命令的文件BAT文件来安装启动它,命令如下:

%windir%\Microsoft.NET\  Framework\v2.0.50727\  InstallUtil.exe %CD%\  SendMessage.exe  net start SendMessage

怎么用C#实现Windows后台服务

安装完成以后,我们可以在我的电脑管理服务里面看到才安装上的后台服务.

怎么用C#实现Windows后台服务

测试,采用定时访问数据库发送短信的服务并不是很耗资源,刚启动的时候只占用内存为7、8M左右,经过在服务器上连续运行几天不关闭占用的内存也只升到15M左右,运行比较稳定,这里提供一个短信二次开发接口说明,有兴趣的朋友可以去下载看下.

智网动力集团短信二次开发说明文档示例

特别申明:本文及内容如非特别注明,均为本人Jonllen原创,版权均归原作者个人所有,转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

感谢各位的阅读,以上就是“怎么用C#实现Windows后台服务”的内容了,经过本文的学习后,相信大家对怎么用C#实现Windows后台服务这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 怎么用C#实现Windows后台服务

本文链接: https://lsjlt.com/news/294677.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么用C#实现Windows后台服务
    这篇文章主要讲解了“怎么用C#实现Windows后台服务”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用C#实现Windows后台服务”吧!C#实现Windows后台服务实例之前要明白的...
    99+
    2023-06-17
  • 怎么用C#实现WINDOWS服务程序
    这篇文章主要讲解了“怎么用C#实现WINDOWS服务程序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用C#实现WINDOWS服务程序”吧!在做C# WINDOWS服务之前先熟悉一下C#...
    99+
    2023-06-17
  • Android实现TCP断点上传 后台C#服务接收
    终端实现大文件上传一直都是比较难的技术,其中涉及到后端与前端的交互,稳定性和流量大小,而且实现原理每个人都有自己的想法,后端主流用的比较多的是Http来实现,因为大多实现过断点...
    99+
    2022-06-06
    C# Android
  • Linux C 后台服务程序单进程控制的实现
    介绍 通常后台服务器程序都必须有且只有一个进程,那么如何单进程呢? 本例子是通过flock函数对/var/run/myserver.pid记录pid文件的进行加锁 若加锁不正常,说明后台服务进程已经在运行了,这时...
    99+
    2022-06-04
    Linux C 后台单进程控制 linux 后台进程控制
  • 怎么用jQuery AJAX实现后台传数据
    这篇文章主要介绍了怎么用jQuery AJAX实现后台传数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用jQuery AJAX实现后台传数据文章都会有所收获,下面我们一...
    99+
    2024-04-02
  • C#后台调用WebApi接口的实现方法
    目录1.WebRequest方式2.HttpClient 方式1.WebRequest方式 private void button1_Click(object sender, Eve...
    99+
    2024-04-02
  • C#如何实现前台与后台方法互调
    本篇文章为大家展示了C#如何实现前台与后台方法互调,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前台与后台方法互调是很多读者关心的功能。下面提供的代码,可以实现C#前台与后台方法互调的目的。<...
    99+
    2023-06-17
  • postman怎么实现传递ArrayList 给后台
    小编给大家分享一下postman怎么实现传递ArrayList 给后台,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!postman 传递 ArrayList 给后台后台接受参数如下package com...
    99+
    2023-06-22
  • asp后台管理系统怎么实现
    ASP后台管理系统可以通过以下步骤实现:1. 确定需求:根据管理系统的功能和用户需求,确定系统的所有功能模块和页面。2. 设计数据库...
    99+
    2023-05-30
    asp后台管理系统 asp
  • 使用springboot怎么实现前后台数据交互
    这篇文章将为大家详细讲解有关使用springboot怎么实现前后台数据交互,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.在路径中传递数据,比如对某个数据的id:123前台发送:格式大致如...
    99+
    2023-05-31
    springboot
  • jquery怎么实现向后台提交数组
    这篇“jquery怎么实现向后台提交数组”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“jquery怎么实现向后台提交数组”文...
    99+
    2023-06-17
  • Android中怎么在后台实现多线程
    Android中怎么在后台实现多线程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。后台功能是Android的四大组件之一,其重要程度自然不言而喻,而服务是Android中实现程...
    99+
    2023-06-04
  • javascript怎么调用后台
    今天小编给大家分享一下javascript怎么调用后台的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、使用JQuery A...
    99+
    2023-07-06
  • 怎么实现Vue的数据可视化后台
    本篇内容介绍了“怎么实现Vue的数据可视化后台”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!主要功能点和实...
    99+
    2024-04-02
  • node.js中怎么实现前后台交互功能
    node.js中怎么实现前后台交互功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。执行过程为:(1)在浏览器地址栏输入网址,向node服务器...
    99+
    2024-04-02
  • CRM, C4C和Hybris的后台作业怎么实现
    本篇内容介绍了“CRM, C4C和Hybris的后台作业怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!CRM使用事务码SM36查看C...
    99+
    2023-06-04
  • JAVA后台怎么实现POST/GET访问方法
    这篇文章主要讲解了“JAVA后台怎么实现POST/GET访问方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JAVA后台怎么实现POST/GET访问方法”吧!一、具体作用调用其他厂商提供的...
    99+
    2023-06-02
  • C#实现Windows服务测试与调试
    一、测试Windows服务 为了使Windows服务程序能够正常运行,我们需要像创建一般应用程序那样为它创建一个程序的入口点。像其他应用程序一样,Windows服务也是在Progra...
    99+
    2024-04-02
  • 怎么用C#安装Windows服务程序
    本篇内容主要讲解“怎么用C#安装Windows服务程序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用C#安装Windows服务程序”吧!C#Windows服务程序安装是如何的呢?让我们开始...
    99+
    2023-06-17
  • Node.js使用http模块实现后台服务器流程解析
    目录客户端与服务器IP地址域名和域名服务器端口号什么是http模块创建基本的web服务器小结客户端与服务器 客户端 : 在网络节点中,负责消费资源的电脑,叫做客户端,例如:在网络中你...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作