C#简单windows服务
因为做后台比较多,所以经常需要写一些后台服务。一般的流程是先创建一个服务项目,加入代码。然后打包一个安装程序或者直接用dos命令安装服务。下面是详细内容:
1. 创建windows服务项目。
VisualStudio的项目模版里面有一个对应的是windows服务,如下图:

选择上面的模版新建项目后,服务的主程序代码在Service1.cs里面,右击这个文件选择查看代码。下面的代码是一个简单的例子,真正的项目里面一般会调用我们自己写的一些库来实现比较复杂的逻辑,不过大部分情况下都是开个线程跑一个循环。
public partial class Service1 : ServiceBase
{
private Thread t;
public Service1()
{
InitializeComponent();
t = new Thread(Run);
} protected override void OnStart(string[] args)
{
t.Start();
} protected override void OnStop()
{
t.Abort();
} private void Run()
{
while (true)
{
File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + "\\xx.txt", DateTime.Now.ToString() + Environment.NewLine);
Thread.Sleep();
}
}
}
代码编写完后构建项目,会生成相关的程序集,主要是WindowsService1.exe。
2. 安装服务。
我一般用命令行来安装服务,所以流程比较简单。我们可以把编译好的程序放到一个指定的目录,比如"D:\my\service1"。
下面是安装命令:sc create hello binPath= "D:\my\service1\WindowsService1.exe" DisplayName= "hello"
其中,create后面的hello是服务名,另外两个参数分别是程序路径和显示名称。注意选项=符号和值之间有个空格。
安装时还可以指定依赖等其他选项,具体可以sc create \?来查看。
安装完后打开services.msc会看到新安装的服务,右击启动便可以运行服务了。
下面是一些常用的维护:
1. 更新服务程序。
先停止服务,然后等待一会,然后将新构建的程序集复制到安装目录覆盖老的程序集。
然后再重新启动服务。
2. 删除服务。
sc delete hello
其中hello是服务名称。
3. 修改服务描述。
sc description [服务名称] [描述]
sc description hello 测试
C#简单windows服务的更多相关文章
- c#创建、安装、卸载、调试windows服务的简单事例
最近工作中用到了windows服务,对其有深刻理解和丰富经验谈不上,本篇文章只是简单陈诉用c#创建.安装.卸载.调试windows服务的步骤. 一.创建windows服务 1.用VS创建windows ...
- 使用Topshelf组件构建简单的Windows服务
很多时候都在讨论是否需要了解一个组件或者一个语言的底层原理这个问题,其实我个人觉得,对于这个问题,每个人都有自己的看法,个人情况不同,选择的方式也就会不同了.我个人觉得无论学习什么,都应该尝试着去了解 ...
- 使用C#开发windows服务定时发消息到钉钉群_群组简单消息
前言:本提醒服务,是由C#语言开发的,主要由windows服务项目和winform项目组成,运行服务可实现功能:向钉钉自定义机器人群组里,定时,定次,推送多个自定义消息内容,并实现主要功能的日志记录. ...
- C# Asp.net Quartz.NET作业调度之创建、安装、卸载、调试windows服务的简单事例
一.创建windows服务 1.用VS创建windows服务,结果如下: 2.删除默认生成的Service1.cs文件,然后创建自己的服务文件(如:MyService),并修改Program.cs文件 ...
- windows服务 MVC之@Html.Raw()用法 文件流的读写 简单工厂和工厂模式对比
windows服务 public partial class Service1 : ServiceBase{ System.Threading.Timer recordTimer;public S ...
- C#创建、安装、卸载、调试Windows Service(Windows 服务)的简单教程
前言:Microsoft Windows 服务能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面.这 ...
- C#开发Windows服务 附简单实例实现禁止QQ运行
本实例主要实现下面三个基本功能 1.C#开发windows服务 2.禁止QQ等程序运行 3.为windows服务创建自动安装程序 下面针对这三个基本功能进行实现 一.C#开发windows服务 Win ...
- 单线程与多线程的简单示例(以Windows服务发短信为示例)
单线程示例: public delegate void SM(); SM sm = new SM(() => { while (true) ...
- 创建Windows服务简单流程
1.首先打开VS2010(或者其他版本),创建Windows服务项目 2.创建完成后切换到代码视图,代码中默认有OnStart和OnStop方法执行服务开启和服务停止执行的操作,下面代码是详细解释: ...
随机推荐
- js浏览器各种位置检测
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- php验证手机号码
大家都应该有这个常识,中国的手机号码都是以数字“1”开头,然后利用“0~9”10个数字组成的11位数字组合,那么我们的验证规则肯定要根据这个思路来写. 根据上面的简单思路,我们便可以写下以下的验证代码 ...
- QQ分组实现,可收缩---ExpandableListView
activity: package com.zzw.qqgroup; import java.util.ArrayList; import java.util.HashMap; import java ...
- Sql Server数据库之通过SqlBulkCopy快速插入大量数据
废话不多说,直接上代码 /// <summary> /// 海量数据插入方法 /// </summary> /// <param name="connectio ...
- python 内存管理
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 语言的内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言的 ...
- python3.3中使用tornado.options.parse_config_file的时候,在windows下conf为utf-8时,报错的问题
由于我的windows7下的默认编码是gbk 在调用tornado.options.parse_config_file时,内部代码为 with open(path) as f: exec_in(f.r ...
- oracle分区表(整理)
Oracle 表分区 早在8.0.5版本中,Oracle就将范围分区技术引入,现在分区功能已经越来越强大,包括支持扩展分区功能.Interval分区.外键分区.模拟列分区.以及分区建议器等.那么,分区 ...
- 一步一步实现Linux设备驱动的Helloworld模块
学了那么多程序语言,总是有一个Hello world开头,不禁感叹Hello world的强大.呵呵,废话少说,咋们的故事当然要从这个Hello world开始. 先查看自己OS使用的内核版本[don ...
- golang的nil
golang中什么样的类型可以赋值nil? 类型文档中有注定"uninitialized value is nil"的类型都可以赋值nil. golang的基本类型不能赋值nil: ...
- JVM规范小结
JVM规范组成: 1. 字节码(ByteCode): 以Class或Interface为基本单位, 具有固定结构. 2. 指令集(InstructionSet): 每个指令用一个字节表示, 最多256 ...