最近在做一个物联网项目,其中有一个模块是需要实现热水工程的自动化补水和回水功能

实现的方式有多种,我选用了VS C#的Windows服务方式。

首先是创建一个windows服务项目(名称随你喜欢的规范命名,我这里就用默认的Service1)

VS自动为我们生成了一个什么都不干的空服务框架,虽然什么都不干,但是生成项目,安装进服务管理中,也是能启动和停止的。

麻省虽小,五脏俱全。

那么,一个能用的服务就产生了。我们要做的就是做修改和增加功能。

先来看看VS生成的服务框架都有哪些内容吧,了解了这些自然就懂得服务进程的开发了。PSp:)

首先来看看项目列表目录:有五项:

1).Properties :

2).引用:

3).App.config:

这三项不用说了,太熟悉不过了。与WinForm一样一样的。

4).Program.cs:

这个也很熟悉了吧,进程入口。

static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main()
{
ServiceBase[] ServicesToRun;  //看到没,这里定义的是一个数组。我们先不管ServiceBase是干什么的,看到Base应该想到是一个基类了。
ServicesToRun = new ServiceBase[] 
{
new Service1()   //这里只初始化了一个服务,那么我们就可以想得到,可以增加多个在这里。Service1是继承自 ServiceBase,这里其实就是协变的应用,也可以用里氏转换来理解。
};
ServiceBase.Run(ServicesToRun);//Run方法与WinForm里的 Run,控制台程序中的main是一个意思了。数组ServicesToRun里放了多少个都会启动。
}
}

5).Service1.cs:

这个才是我们这个服务进程的核心所在。包含了一个设计器和代码。

在设计器页面,点击右键选择属性或直接按F4,打开Service1这个类的属性窗口。我们可以看到:

Name:不用多说,自然是这个服务类的类名了,改成你自己的。

ServiceName:服务进程的名字。windows操作系统维护服务进程时最喜欢这个属性了。PS:)

AutoLog:默认为True,就是是不是设置为windows日志记录的意思。

CanStop:字面含义就是能够停止,也不能理解,设为True,可以在服务器管理中或net stop命令能让它停止。

CanShutdown:能够关机,意思就是在系统将要关机的时候,能接收系统发送过来的通知,可以做一些相应的处理。

这里是几个常用的属性了。其它的就不多说了。

现在我们来看一下代码部分:

//VS 默认写好了的代码:

public partial class Service1 : ServiceBase  //没错吧,Service1就是继承自ServiceBase的
{

//Timer time;//定时器
public Service1()
{
InitializeComponent();

//Todo:初始化一些字段值属性值等,如:

//time.Interval=1000;

//time.Elapsed += time_Elapsed;
}

protected override void OnStart(string[] args)
{

//这个方法就是服务在启动后执行的第一个方法。可以理解为一个类的实例的构造方法。

//服务启动好后,你想要这个服务干些什么事,入口就在这里了。

File.AppendAllText("C:\Log.txt","服务已启动");
}

protected override void OnStop()
{

//这里看名字也知道这是服务将要停止的时候执行的方法。像window的OnClose这么理解就对了。

File.AppendAllText("C:\Log.txt","服务已停止");
}

//这两个方法是最基本需求的方法。还有几个常用的如:

//OnShutdown(),//该方法指定应在系统即将关闭前执行的处理

//OnPause(),//指定要在服务暂停时采取的操作。

//OnContinue()//指定要在服务暂停后恢复正常功能时采取的操作。

//这些都是基类定义好的抽象方法,要在子类中实现的。所以在实现时要记得加上override。

}

关于服务进程的开发,理解了这些也就不难开发了。其它的功能就像开发WinForm和控制台程序一样的开发就完事。

但是这时候生成的服务进程的exe是不能直接运行的,需要安装到系统的服务器控制平台中才能启动运行。

VS也进供了方法。

只需要在Service1.cs的设计界面,右键选择添加安装程序,会自动帮我们生成安装程序:ProjectInstaller.cs,连引用都做好了。真贴心啊。PS:)

然后要做的就是重新生成项目。

然后在VS的工具中打开本机工具命令提示。

执行:installutil [你生成的服务进程的完整路径]

O了。去服务管理控制器中体验自己开发的服务器:)

删除服务使用:installutil -u [你生成的服务进程的完整路径]

关于C#开发 windows服务进程的更多相关文章

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

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

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

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

  3. [教学] Delphi Berlin 10.1 开发 Windows 10 平板 App 远程调试

    Delphi Berlin 10.1 开发 Windows 10 平板 App 远程调试安装步骤: 准备电脑: 一台开发电脑,安装 Delphi 开发环境 一台平板电脑,安装 PAServer,安装方 ...

  4. 解决VS2008 开发Windows Mobile 项目生成速度慢的问题(转)

    最近用VS2008开发Windows Mobile程序,使用C#..NET Compact Framework,发现项目生成速度比较慢.用VS2008打开项目后,开始一段时间生成速度还能忍受,时间一长 ...

  5. 用Node.js开发Windows 10物联网应用

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 未来10年内,物联网将会如移动互联网这样深入到我们生活的各方各面.所以微软现在对物联网进行了 ...

  6. 【使用Unity开发Windows Phone上的2D游戏】(1)千里之行始于足下

    写在前面的 其实这个名字起得不太欠当,Unity本身是很强大的工具,可以部署到很多个平台,而不仅仅是可以开发Windows Phone上的游戏. 只不过本人是Windows Phone 应用开发出身, ...

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

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

  8. 关于开发Windows服务程序容易搞混的地方!

    在开发Windows服务程序时,我们一般需要添加安装程序,即:serviceInstaller,里面有几个关于名称属性,你都搞明白了吗? 1.Description:表示服务说明(描述服务是干什么的) ...

  9. Selenium2学习-001-Selenium2 WebUI自动化Java开发 Windows 环境配置

    此文主要介绍 Selenium2 WebUI自动化Java开发 Windows 环境配置,供各位亲们参考,若有不足之处,敬请各位大神指正,非常感谢! 所需软件列表如下所示: 所属分类 具体名称 备注 ...

随机推荐

  1. Angularjs基础(学习整理)

    AngularJS 通过 ng-directives 扩展了 HTML. ng-app 指令定义一个 AngularJS 应用程序. ng-model 指令把元素值(比如输入域的值)绑定到应用程序. ...

  2. 跨主机网络概述 - 每天5分钟玩转 Docker 容器技术(48)

    前面已经学习了 Docker 的几种网络方案:none.host.bridge 和 joined 容器,它们解决了单个 Docker Host 内容器通信的问题.本章的重点则是讨论跨主机容器间通信的方 ...

  3. [BZOJ 1409] Password

    贴一发题面 1409: Password Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 242  Solved: 82[Submit][Status][D ...

  4. 蓝桥杯比赛javaB组练习《牌型种数》

    牌型种数 小明被劫持到X赌城,被迫与其他3人玩牌.一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张.这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌 ...

  5. Scrapy爬取西刺代理ip流程

    西刺代理爬虫 1. 新建项目和爬虫 scrapy startproject daili_ips ...... cd daili_ips/ #爬虫名称和domains scrapy genspider ...

  6. 重定向URL

    重定向的原因有哪些?[1]网址变更了[2]权限不够 [1]网址变更了 [举例]以google为例,之前我们可以访问www.google.cn,但是后来Z.F不让我们访问它了,那么google公司为了避 ...

  7. 学问Chat UI(2)

    前言 上文讲了下要去做哪些事,重点分析了融云Sdk中RongExtension这个扩展控件,本文来学习下同样是融云Sdk中的AutoRefreshListView如何适配多种消息的实现方式,写的有不足 ...

  8. shell变量的替换,命令的替换,转义字符

    1,shell变量的替换 变量可以根据变量是否为空或者被删除,而被替换为特定的值 ${var}  变量本来的值 $(var:-word)   如果变量为空,或者已被删除那么返回word,但是不改变va ...

  9. Java开发工具(Eclipse中内容辅助键的使用)

    * A:Alt+/ 起提示作用* B:main+alt+/,syso+alt+/,给出其他提示* C:补充输出语句,选中需要输出的部分,alt+/选择最后一项即可* C:定义自己的alt + / * ...

  10. 汇编总结:mov指令

    mov指令的作用: mov指令可能是汇编里用的最多的指令了,完成c语言里的赋值. mov指令种类: 1.普通的mov指令 2.做符号扩展的movs 3.做零扩展的movz 1.普通mov的种类有: m ...