转载自:http://www.cnblogs.com/xujie/p/5695673.html

1、新建windows服务项目,我这里选择的是Framework4.0,没有选择高版本是为了防止在服务在一些低版本系统上无法正常运行。

2、添加Windows服务的安装程序。

在默认Service1设计器界面空白处点击右键->添加安装程序,系统会自动新建一个带有默认配置的安装程序类,如下图:

新建完安装程序后,需要给默认的serviceInstaller1和serviceProcessInstaller1做一些基本的属性设置。如下图:

以上工作完成,安装程序配置完毕。

注意:如果不给服务添加安装程序,后面是没法把服务安装至windows系统里的。

3、添加应用程序配置文件(如果有需要的话)。

如果项目有需要,一些应用程序的配置参数可以设置在此文件里(例如:数据库连接字符串)。

4、编写windows服务主代码

  1.  
    using System;
  2.  
    using System.Collections.Generic;
  3.  
    using System.ComponentModel;
  4.  
    using System.Data;
  5.  
    using System.Diagnostics;
  6.  
    using System.IO;
  7.  
    using System.Linq;
  8.  
    using System.ServiceProcess;
  9.  
    using System.Text;
  10.  
    using System.Threading.Tasks;
  11.  
     
  12.  
    namespace WinServiceTest
  13.  
    {
  14.  
    public partial class Service1 : ServiceBase
  15.  
    {
  16.  
    public Service1()
  17.  
    {
  18.  
    InitializeComponent();
  19.  
     
  20.  
    System.Timers.Timer timer = new System.Timers.Timer();
  21.  
    timer.Elapsed += new System.Timers.ElapsedEventHandler(TimedEvent);
  22.  
    timer.Interval = 5000;//每5秒执行一次
  23.  
    timer.Enabled = true;
  24.  
    }
  25.  
    public int count = 0;
  26.  
    //定时执行事件
  27.  
    private void TimedEvent(object sender, System.Timers.ElapsedEventArgs e)
  28.  
    {
  29.  
    //业务逻辑代码
  30.  
    EmailClass mail = new EmailClass();
  31.  
     
  32.  
    mail.Email(count++);
  33.  
    }
  34.  
     
  35.  
    protected override void OnStart(string[] args)
  36.  
    {
  37.  
    this.WriteLog("\n当前时间:" + DateTime.Now.ToString("yyyy-MM-dd hh-mm-ss") + "\n");
  38.  
    this.WriteLog("客户端数据同步服务:【服务启动】");
  39.  
    }
  40.  
     
  41.  
    protected override void OnStop()
  42.  
    {
  43.  
    this.WriteLog("\n当前时间:" + DateTime.Now.ToString("yyyy-MM-dd hh-mm-ss")+ "\n");
  44.  
    this.WriteLog("客户端数据同步服务:【服务停止】");
  45.  
    }
  46.  
    protected override void OnShutdown()
  47.  
    {
  48.  
    this.WriteLog("\n当前时间:" + DateTime.Now.ToString("yyyy-MM-dd hh-mm-ss") + "\n");
  49.  
    this.WriteLog("客户端数据同步服务:【计算机关闭】");
  50.  
    }
  51.  
     
  52.  
    #region 记录日志
  53.  
    /// <summary>
  54.  
    /// 记录日志
  55.  
    /// </summary>
  56.  
    /// <param name="msg"></param>
  57.  
    private void WriteLog(string msg)
  58.  
    {
  59.  
     
  60.  
    //string path = @"C:\log.txt";
  61.  
     
  62.  
    //该日志文件会存在windows服务程序目录下
  63.  
    string path = AppDomain.CurrentDomain.BaseDirectory + "\\log.txt";
  64.  
    FileInfo file = new FileInfo(path);
  65.  
    if (!file.Exists)
  66.  
    {
  67.  
    FileStream fs;
  68.  
    fs = File.Create(path);
  69.  
    fs.Close();
  70.  
    }
  71.  
     
  72.  
    using (FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write))
  73.  
    {
  74.  
    using (StreamWriter sw = new StreamWriter(fs))
  75.  
    {
  76.  
    sw.WriteLine(DateTime.Now.ToString() + " " + msg);
  77.  
    }
  78.  
    }
  79.  
    }
  80.  
    #endregion
  81.  
    }
  82.  
    }

4、安装与卸载服务

readme里面的内容
  1.  
    请将【WinServiceTest】拷贝到D盘或C盘根目录;
  2.  
    安装服务【管理员身份】运行【SC安装-发送邮件】即可;
  3.  
    卸载服务【管理员身份】运行【SC卸载】即可;

SC安装-发送邮件:

  1.  
    @echo.请稍等,服务启动......
  2.  
    @echo off
  3.  
    @sc create GX_To_EMAIL binPath= "D:\WinServiceTest\WinServiceTest\bin\Debug\WinServiceTest.exe"
  4.  
    DisplayName=每隔一段时间发送邮件的服务 start= auto
  5.  
    @sc description GX_To_EMAIL 定时发送邮件
  6.  
    @sc start GX_To_EMAIL
  7.  
    @echo off
  8.  
    @echo.启动完毕!
  9.  
    @pause

SC卸载:

  1.  
    @echo.服务卸载......
  2.  
    @echo off
  3.  
    @sc stop GX_To_EMAIL
  4.  
    @sc delete GX_To_EMAIL
  5.  
    @sc stop GX_To_EMAIL
  6.  
    @echo off
  7.  
    @echo.卸载完毕!
  8.  
    @pause

用 vs 2017创建 windows 服务的更多相关文章

  1. 用C#创建Windows服务(Windows Services)

    用C#创建Windows服务(Windows Services) 学习:  第一步:创建服务框架 创建一个新的 Windows 服务项目,可以从Visual C# 工程中选取 Windows 服务(W ...

  2. 玩转Windows服务系列——创建Windows服务

    创建Windows服务的项目 新建项目->C++语言->ATL->ATL项目->服务(EXE) 这样就创建了一个Windows服务项目. 生成的解决方案包含两个项目:Servi ...

  3. .Net创建windows服务入门

    本文主要记录学习.net 如何创建windows服务. 1.创建一个Windows服务程序 2.新建安装程序 3.修改service文件 代码如下 protected override void On ...

  4. C# 创建Windows服务

    创建windows服务项目   2 右键点击Service1.cs,查看代码, 用于编写操作逻辑代码 3 代码中OnStart用于执行服务事件,一般采用线程方式执行方法,便于隔一段事件执行一回 END ...

  5. 使用Topshelf创建Windows服务

    概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...

  6. [转]C#创建Windows服务与安装

    本文档用于创建windows服务说明,使用vs2010系统平台 创建项目 1 创建windows服务项目 2 右键点击Service1.cs,查看代码, 用于编写操作逻辑代码 3 代码中OnStart ...

  7. [Solution] Microsoft Windows 服务(2) 使用Topshelf创建Windows服务

    除了通过.net提供的windows服务模板外,Topshelf是创建Windows服务的另一种方法. 官网教程:http://docs.topshelf-project.com/en/latest/ ...

  8. 在64位windows下使用instsrv.exe和srvany.exe创建windows服务

    在64位windows下使用instsrv.exe和srvany.exe创建windows服务   在32位的windows下,包括windows7,windows xp以及windows 2003, ...

  9. 使用Topshelf 5步创建Windows 服务 z

    使用Topshelf创建Windows 服务简要的介绍了创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with T ...

随机推荐

  1. 【SQL模板】三.插入/更新 数据模板TSQL

    ---Name: 插入/更新 数据模板.sql ---Purpose: 用于更新 数据库中 历史数据 或 插入 新数据 的脚本模板 ---Author: xx ---Time: 2015-12-18 ...

  2. 【原创】Silverlight的ComboBox.SelectValue无法赋值

      前几天开发中 给ComboBox的SelectValue属性赋值是,老是赋不上去.之前SelectValue为Null,执行完调试看下,还是Null.很诡异   ComboBox的SelectVa ...

  3. 【笔记】C#往TextBox的方法AppendText加入的内容里插入换行符

    C# TextBox换行[huan hang]时你往往会想到直接付给一个含有换行[huan hang]符"\n"的字符[zi fu]串[zi fu chuan]给Text属性[sh ...

  4. composer install 时,提示:Package yiisoft/yii2-codeception is abandoned, you should avoid using it. Use codeception/codeception instead.的解决

    由 SHUIJINGWAN · 2017/11/24 1.composer install 时,提示:Package yiisoft/yii2-codeception is abandoned, yo ...

  5. 修改python ide的主题,颜色

    1.找到这个名叫config-highlight.cfg文件后接下来就需要编辑它了 2. 贴上: [Obsidian] definition-foreground = #678CB1 error-fo ...

  6. PetaPoco与MySQL

    随便写写的,PetaPoco与MySQL一起使用,在一个工控项目中充分使用节省不少开发时间,经历大半年的努力的项目接近完成,客户不认帐,开始需求合同就是个败笔,技术还是仅能解决技术问题而已! 上图上代 ...

  7. python文件对比

    #-*- encoding:utf-8 -*- class loadDatas(object): def __init__(self): self.path='./data' def load_com ...

  8. Ansible 笔记 (3) - 编写 playbook

    playbook 相当于多个命令的编排组合然后一起运行,类似写脚本.在学习 playbook 之前需要了解 yaml 格式. 编写playbook的步骤: 定义主机与用户 编写任务列表 执行 play ...

  9. @media screen

    参考地址: http://www.swordair.com/blog/2010/08/431/ http://ashaochangfu.blog.163.com/blog/static/1042517 ...

  10. 笔记:PS 智能对象

    什么是智能对象? 智能对象是包含栅格或矢量图像(如 Photoshop 或 Illustrator 文件)中的图像数据的图层.智能对象将保留图像的源内容及其所有原始特性,从而让您能够对图层执行非破坏性 ...