C#开发Windows服务
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(, 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服务的更多相关文章
- 使用Visual Studio 2015 Community 开发windows服务
昨天研究在.NET下开发Windows服务程序,期间遇到一些小问题,这里仅将自己的开发过程和需要注意的地方写下和广大网友分享…… 1.基础 Windows服务是指系统启动时能够自己运行的程序.W ...
- C#开发Windows服务 附简单实例实现禁止QQ运行
本实例主要实现下面三个基本功能 1.C#开发windows服务 2.禁止QQ等程序运行 3.为windows服务创建自动安装程序 下面针对这三个基本功能进行实现 一.C#开发windows服务 Win ...
- VS2013开发Windows服务项目
这篇随笔里,我将介绍如何用VS2013开发Windows服务项目,实现的功能是定时发送电子邮件. 开发环境:VS2013,SQL Server2008,采用C#语言开发 步骤一:创建Windows服务 ...
- C#开发Windows服务详细流程
1.Windows服务简单介绍 Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序,主要用于长时间运行的功能或者执行定时任务.一般情况下,用户不能通过用户界面来安装和启 ...
- 使用Topshelf开发Windows服务、log4net记录日志
开发windows服务,除了在vs里新建服务项目外(之前有写过具体开发方法,可点击查看),还可以使用Topshelf. 不过使用topshelf需要.netframework 4.5.2版本,在vs2 ...
- 开发Windows服务
在开发Windows服务时需要注意一点,如果在开发完成后,需要通过命令来进行安装的,那么在开发的时候,需要在服务类上面添加一个安装文件.如下图: 添加完成后,就 ...
- c#金额转换成中文大写金额 .Net开发Windows服务
c#金额转换成中文大写金额 2018-08-24 转别人 c#金额转换成中文大写金额 /// <summary> /// 金额转换成中文大写金额 /// </summary> ...
- C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库
C# DateTime的11种构造函数 别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...
- C#开发windows服务如何调试——资料整理
原文标题:C# Windows服务程序如何进行调试 原文地址:https://jingyan.baidu.com/article/456c463b18e1b00a583144b3.html 第一种: ...
- C#常规开发Windows服务
.Net平台下开发Windows服务的支持库很多,除了通过标准的Windows服务项目,还有一些优秀的开源架构比如:TopSelf:本文以常规项目为例 一.开发 1.新建[Windows服务] 项目: ...
随机推荐
- Sqlite学习笔记(五)&&SQLite封锁机制
概述 SQLite虽然是一个轻量的嵌入式数据库,但这并不影响它支持事务.所谓支持事务,即需要在并发环境下,保持事务的ACID特性.事务的原子性,隔离性都需要通过并发控制来保证.那么Sqlite的并发控 ...
- PowerBI通过gateway连接多维数据库
简介 Microsoft Power BI 是由微软推出的商业智能的专业分析工具,给用户提供简单且丰富的数据可视化及分析功能.个人非常喜欢,有免费版和Pro的付费版,今天主要是介绍下通过gatew ...
- c# 注册全局热键
//引入系统API [DllImport("user32.dll")] static extern bool RegisterHotKey(IntPtr hWnd, int id, ...
- Spark SQL 之 Migration Guide
Spark SQL 之 Migration Guide 支持的Hive功能 转载请注明出处:http://www.cnblogs.com/BYRans/ Migration Guide 与Hive的兼 ...
- IIS7配置PHP图解(转)
IIS7+PHP_5.2.17 于之前安装IIS的时候已经选上了isapi扩展和isapi筛选,这里就不用另外再添加角色服务了,直接开始 先修改php.ini文件.. 把c:\php下的php.ini ...
- my_strlen()
int my_strlen(const char* S){ int i=0; while('\0'!=*(S+i)){ i++; } return i; }
- Linux设置环境变量小结:设置永久变量&临时变量 全局变量&局部变量
1.总结背景 在linux系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现“command not found”的提示内容.如果每次都到安装目标文件夹内,找到可执行文件来进行操作就太繁 ...
- raspberry pi2 智能小车源码及测试视频
作者:XIAOBO QQ:463431476 转载请注明作者Python 源代码 import RPi.GPIO as GPIO #human-computer-interaction import ...
- Spring-data-jpa详解,全方位介绍。
本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求.这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring ...
- Android界面隐藏软键盘的探索(兼findViewById返回null解决办法)
最近写的APP,老师说我的登陆界面虽然有ScrollView滑动,但用户体验不太好,因为软键盘会挡住输入框或登录button(小米Pad,横屏,当指定只能输入数字时没找到关闭系统自带键盘的下箭头). ...