一、创建windows服务

1、用VS创建windows服务,结果如下:

2、删除默认生成的Service1.cs文件,然后创建自己的服务文件(如:MyService),并修改Program.cs文件的代码,如下:

此时,解决方案的目录结构如下:

3、双击MyService.cs服务文件,在左侧设计模式中,右键,点击“添加安装程序”,自动会生成Projectinstaller.cs文件以及两个安装组件,如下:

4、右键”ServiceProcessInstaller1“,选择属性,设置Account 帐号方式,建议为LocalService,如下:

5、右键”ServiceInstaller1“,选择属性,设置属性

  a)Description 服务描述,直接显示到Windows服务列表中的描述;

  b)DisplayName 服务显示名称,直接显示到Windows服务列表中的名称;

  c)ServiceName 服务进程名称,安装与卸载服务时的唯一标识.

如下:

6、创建安装服务批处理文件Install.bat,可以创建记事本,然后修改后缀为bat,记事本内容如下:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe WindowsServiceDemo.exe
Net Start MyService
sc config MyService start= auto
pause

记事本另存为时设置编码为ANSI,如下图:

7、同理创建创建卸载服务批处理文件Uninstall.bat,内容如下:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u WindowsServiceDemo.exe
pause

此时解决方案的目录结构如下:

二、写服务代码

右键”MyService.cs“,选择查看代码,如下:

namespace WindowsServiceDemo
{
partial class MyService : ServiceBase
{
public MyService()
{
InitializeComponent();
} protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
} protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
}
}
}

下面实现自己的简单功能,代码如下:

using System;
using System.Diagnostics;
using System.IO;
using System.ServiceProcess;
using System.Timers; namespace WindowsServiceDemo
{
partial class MyService : ServiceBase
{
private Timer time = new Timer();
public MyService()
{
InitializeComponent();
} protected override void OnStart(string[] args)
{
WriteLog("服务启动,时间:"+DateTime.Now.ToString("HH:mm:ss") + "\r\n"); time.Elapsed += new System.Timers.ElapsedEventHandler(MethodEvent);
time.Interval = * ;//时间间隔为2秒钟
time.Start();
} protected override void OnStop()
{
WriteLog("服务停止,时间:" + DateTime.Now.ToString("HH:mm:ss") + "\r\n");
} private void MethodEvent(object source, System.Timers.ElapsedEventArgs e)
{
time.Enabled = false; string result = string.Empty;
string startTime = DateTime.Now.ToString("HH:mm:ss");
try
{
//......... result = "执行成功,时间为:"+ startTime;
}
catch (Exception exp)
{
result = "失败,原因:" + exp.Message;
}
finally
{
WriteLog(result); time.Enabled = true;
}
} /// <summary>
/// 日志记录
/// </summary>
/// <param name="logInfo"></param>
public void WriteLog(string logInfo)
{
try
{
string logDirectory = AppDomain.CurrentDomain.BaseDirectory + "\\Logs";
if (!Directory.Exists(logDirectory))
{
Directory.CreateDirectory(logDirectory);
}
string filePath = logDirectory + "\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
File.AppendAllText(filePath, logInfo);
}
catch
{
}
}
}
}

具体功能是2秒钟执行一次,并记录日志。

三、安装windows服务

重新生成整个解决方案,成功后,从项目所在文件夹赋值bin文件到某个自定义的文件夹,并将Install.bat和Uninstall.bat复制到bin下的Debug文件夹中。

以管理员身份运行Install.bat安装服务,成功结果如下图:

这是右键“我的电脑”,选择“管理”,选择“服务”,就可以看到服务已安装,如下图:

同时,Debug文件夹里有了Logs文件,Logs文件夹里有txt文档,内容如下:

可以看到没2秒钟执行一次。

四、卸载windows服务

卸载服务,同样以管理员身份运行Uninstall.bat即可。

五、调试windows服务

打断点,在工具栏选“调试”下的“附加到进程”,附加自己的服务即可调试。

C# Asp.net Quartz.NET作业调度之创建、安装、卸载、调试windows服务的简单事例的更多相关文章

  1. c#创建、安装、卸载、调试windows服务的简单事例

    最近工作中用到了windows服务,对其有深刻理解和丰富经验谈不上,本篇文章只是简单陈诉用c#创建.安装.卸载.调试windows服务的步骤. 一.创建windows服务 1.用VS创建windows ...

  2. .net Windows服务程序和安装程序制作图解 及 VS 2010创建、安装、调试 windows服务(windows service)

    .net Windows服务程序和安装程序制作 最近项目中用到window服务程序,以前没接触过,比较陌生,花了两天的时间学习了下,写了个简单的服务,但在制作安装程序的时候,参照网上很多资料,却都制作 ...

  3. VS创建、安装、调试 windows服务(windows service)

    1.创建 windows服务 项目   文件 -> 新建项目 -> 已安装的模板 -> Visual C# -> windows ,在右侧窗口选择"windows 服 ...

  4. C# VS 2010创建、安装、调试 windows服务(windows service)

    在一个应用程序中创建多个 windows 服务的方法和 1083 的解决办法 错误解决方案 ------------------------------------------------------ ...

  5. C#创建、安装、卸载、调试Windows Service(Windows 服务)的简单教程

    前言:Microsoft Windows 服务能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面.这 ...

  6. 如何创建一个标准的Windows服务

    出处:http://www.cnblogs.com/wuhuacong/archive/2009/02/11/1381428.html 如何创建一个标准的Windows服务 在很多时候,我们需要一个定 ...

  7. C# Windows服务创建安装卸载

    一.创建Windows服务 使用VS创建一个新的windows服务应用程序 创建完成之后 二.相关配置 修改Service1名称为StartService(可以不改,自行选择) 添加安装程序并修改配置 ...

  8. Quartz.NET+Topshelf 创建Windows服务

    由于项目开发中经常会有定时任务执行的需求,所以会第一时间就想到 windows 服务 的方式,但是做过开发的同学都知道windows服务不利于调试,安装也麻烦: 并且有开源的作业框架Quartz.NE ...

  9. ASP.NET Core使用TopShelf部署Windows服务

    asp.net core很大的方便了跨平台的开发者,linux的开发者可以使用apache和nginx来做反向代理,windows上可以用IIS进行反向代理. 反向代理可以提供很多特性,固然很好.但是 ...

随机推荐

  1. moment.js返回本周

    项目中需要做个打卡的模块.里面有个模块需要返回当前这个星期从星期日到星期六的日期,如下图: 我是通过 moment.js 的 moment().day() 实现这个效果的,它的说明如下图: 关于这个插 ...

  2. Java知多少(56)线程模型

    Java运行系统在很多方面依赖于线程,所有的类库设计都考虑到多线程.实际上,Java使用线程来使整个环境异步.这有利于通过防止CPU循环的浪费来减少无效部分. 为更好的理解多线程环境的优势可以将它与它 ...

  3. asp.net Identity 设置自定义登录

    添加Startup.Auth.cs public partial class Startup { // For more information on configuring authenticati ...

  4. nginx负载均衡二:配置

    配置方法一(可用): upstream tomcatserver1 { server ; server 192.168.70.172; server 192.168.70.173 down; serv ...

  5. swoole 定时器

    timer.php <?php //创建websocket服务器对象,监听0.0.0.0:9502端口 $ws = ); swoole_timer_tick(, function ($timer ...

  6. 如何在django里面添加自定义命令

    第一步:创建对应的目录 第二步:继承父类,写自己的逻辑代码 第三步:执行 manage.py 查看自己的命令

  7. LUA重难点解析

    1.元表 元表也是一个 table,它附加在另一个 table 上,可以扩展该 table 的某些行为. 拿 __index 来举例,它是用来扩展查找索引行为的.在查找一个 key 对应的值时,会依次 ...

  8. react学习笔记(一)用create-react-app构建 React 开发环境

    React 可以高效.灵活的用来构建用户界面框架,react利用高效的算法最小化重绘DOM. create-react-app 是来自于 Facebook,通过该命令不需配置就能快速构建 React ...

  9. SQL逻辑查询语句执行顺序 需要重新整理

    一.SQL语句定义顺序 1 2 3 4 5 6 7 8 9 10 SELECT DISTINCT <select_list> FROM <left_table> <joi ...

  10. day_5.24py

    世间万物皆对象! 闭包就是内部函数中对enclosing作用域的变量进行引用. 装饰器 最开始就说,这篇博客始于闭包,终于闭包,所以装饰器不多说,只说四句话:1.装饰器就是对闭包的使用:2.装饰器用来 ...