Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。

服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。

服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。

还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务

一、创建服务

1、VS新建一个Windows服务项目,命名MyWindowsService

2、修改Service1为MyService,F7进入代码页面(点击切换代码视图),编写操作逻辑代码

3、OnStart用于执行服务事件,一般采用线程方式执行方法,便于隔一段事件执行一回

using System;
using System.IO;
using System.ServiceProcess;
using System.Threading.Tasks; namespace MyWindowsService
{
public partial class MyService : ServiceBase
{
public MyService()
{
InitializeComponent();
}
//服务开启
protected override void OnStart(string[] args)
{
Task.Factory.StartNew(Handle);
}
//服务关闭
protected override void OnStop()
{ } //需要定时执行的代码段
private void Handle()
{
while (true)
{
try
{
var path = AppDomain.CurrentDomain.BaseDirectory + "service.log";
var context = "MyWindowsService: Service Stoped " + DateTime.Now + "\n";
WriteLogs(path, context);
}
catch (Exception)
{
throw;
}
}
} public void WriteLogs(string path, string context)
{
var fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
var sw = new StreamWriter(fs);
sw.BaseStream.Seek(0, SeekOrigin.End);
sw.WriteLine(context); sw.Flush();
sw.Close();
fs.Close();
}
}
}

  服务不能直接运行,F5会出现

二、创建服务安装程序

1、选中MyService.cs,右键-->查看设计器 ;在设计器中右键-->添加安装程序

2、项目中添加了ProjectInstaller.cs文件,该文件中视图自动会添加俩个组件serviceProcessInstaller1和serviceInstaller1

3、选中serviceProcessInstaller1组件,查看属性,设置account为LocalSystem,这样能保证无论是什么用户登录都能执行。

4、选中serviceInstaller1组件,查看属性设置如下

ServiceName:表示在系统服务中的名称

StartType:Manual:手动启动,默认停止,Automatic:自动启动

Description:服务描述

三、安装、卸载服务

安装服务需要InstallUtil.exe,一般在电脑这个目录找到C:\Windows\Microsoft.NET\Framework64\v4.0.30319

此处需要注意的是,在C:\Windows\Microsoft.NET\Framework目录下有很多类似版本,具体去哪个目录要看项目的运行环境,例 如果是.net framework2.0则需要输入 cd C:\Windows\Microsoft.NET\Framework\v2.0.50727

1、重新生成MyWindowsService项目

2、生成的bin目录考到要安装的目录(服务文件已经在附件中):例如:拷贝到C:\(服务路径根据实际情况安装,卸载)

3、窗口+R 打开cmd

  cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319

  安装服务: Installutil C:\bin\Debug\MyWindowsService.exe

  卸载服务: Installutil /u C:\bin\Debug\MyWindowsService.exe

4、我的电脑-->右键管理-->服务和应用程序-->服务  找到我们的服务

启动服务后会一直执行Handle()方法写日志

四、调试服务

首先确保服务已经安装成功,并且处于已启动

VS-->调试-->附加到进程 找到我们服务名称MyWindowsService确定

然后断点就进代码了

如果出现MyWindowsService.exe无法复制或者进程占用的问题

打开进程管理器,关闭MyWindowsService.exe进程就可以了。

+ 关注

C#开发Windows服务 入门的更多相关文章

  1. C#创建Windows服务入门图解(VS2010)

    C#创建Windows服务入门图解(VS2010) Windows服务大家都知道,比如Audio.Theme都是大家比较熟悉的服务,他们可以设为自动启动的,并且在注册表的开机自启动项里是没有痕迹的.所 ...

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

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

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

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

  4. VS2013开发Windows服务项目

    这篇随笔里,我将介绍如何用VS2013开发Windows服务项目,实现的功能是定时发送电子邮件. 开发环境:VS2013,SQL Server2008,采用C#语言开发 步骤一:创建Windows服务 ...

  5. C#开发Windows服务详细流程

    1.Windows服务简单介绍 Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序,主要用于长时间运行的功能或者执行定时任务.一般情况下,用户不能通过用户界面来安装和启 ...

  6. 使用Topshelf开发Windows服务、log4net记录日志

    开发windows服务,除了在vs里新建服务项目外(之前有写过具体开发方法,可点击查看),还可以使用Topshelf. 不过使用topshelf需要.netframework 4.5.2版本,在vs2 ...

  7. 开发Windows服务

          在开发Windows服务时需要注意一点,如果在开发完成后,需要通过命令来进行安装的,那么在开发的时候,需要在服务类上面添加一个安装文件.如下图:               添加完成后,就 ...

  8. c#金额转换成中文大写金额 .Net开发Windows服务

    c#金额转换成中文大写金额   2018-08-24 转别人 c#金额转换成中文大写金额 /// <summary> /// 金额转换成中文大写金额 /// </summary> ...

  9. C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库

    C# DateTime的11种构造函数   别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...

随机推荐

  1. canvas中的rotate的使用方法

    今天在绘制一个足球滚动的时候,想使用rotate方法,之前看到这个方法的时候,并没有引起任何重视,无非就是和CSS3里的rotate一样的用么... 遗憾的是,事实并非如此,由于代码在公司,我也就不去 ...

  2. fenye

    <div class="ptb20 navpages"> <span class=" ">共有<span class=" ...

  3. Mysql 数据库之常用命令[更新中...]

    连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 例如:create database jtest; 显示所有数据库: s ...

  4. Java之内存诊断

    Java 内存诊断比较容易, 需要: 1 获取heap dump 2 分析heap dump 1.1 获取dump之1 VM arguments: -XX:+HeapDumpOnOutOfMemory ...

  5. CSP -- 运营商内容劫持(广告)的终结者

    缘由 我们公司最近手机端H5 经常受到商户和用户的投诉,说有广告并且导致不能正常进行操作,我们商户自己当然不会加广告了,但是商户和用户可不管这些了,就认为是我们的问题 探索发现根本 目前我们用的很多浏 ...

  6. (转)我如何利用前端技术得到 XXOO 网站的 VIP

    网页如图,这里只是说明整个网站的一些技术点,所以不该看的地方我都打上马赛克了,让我们揭开这些网站的整个前端工作原理首先刚进去的时候显示一堆乱七八糟的东西,点进去其中一个页面,下面各种虚假评论,然后每隔 ...

  7. 常用数据存储集合与Map

    一.常见的数据存储实现 二.遍历 1.集合 新循环 迭代器    Iterator Iterator<?> it = C.iterator(); // 问.取.删 it.hasNext() ...

  8. Libgdx 循环绘制图片时间隔的问题

    在libgdx中使用循环绘制一张图片铺满某个区域时,有可能会遇到像素计算没有问题时,图块中间还是有约1像素的间隔,或者是本来没有间隔,做了缩放处理之后发现中间有间隔. 解法 当使用Texture加载图 ...

  9. iOS 10的正确解锁方式

    在iOS 10上,锁屏状态通过按下电源键点亮屏幕之后,用手指轻触Home键,实际上手机是已经解锁了的,不信请看如下截图: 虽然手机已经解锁,但与iOS 9不同的是,此时手机还处在解锁界面而没有进入主屏 ...

  10. Windows zabbix监控远程进程实现机制

    最近负责zabbix监控部署方面的工作,需要完成本地服务端监控远程虚拟机的运行状态(CPU.打开的进程等),与大家分享下我的实现方法. (1) 首先,需要实现记录zabbix客户端的进程的批处理:za ...