转载自: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. 转)Ubuntu14安装wireshark进行抓包

    转自:http://jingyan.baidu.com/article/c74d60009d992f0f6a595de6.html 背景: ubuntu14.04/64位 为了抓包和分析包 安装过程: ...

  2. appcache的一个特殊用法

    Application Cache是HTML5里出现的用来实现离线应用的技术方案.在使用了appcache的页面会被缓存,同时浏览器检查manifest文件有没有变化,如果有变化,只有当用户下次进行访 ...

  3. js深拷贝、浅拷贝

    浅拷贝: 只针对当前对象的属性进行拷贝,若当前对象的属性是引用类型时,这个不考虑,不进行拷贝.若属性是引用类型,拷贝后引用的是地址,如果进行更改,会影响拷贝的原对象属性. 深拷贝:针对当前对象的数据的 ...

  4. java bulid path 和 WEB-INF/lib 下jar 包区别

    用Java Build Path导入包和把包复制到lib下是有区别的,它俩其实不会冲突,也没有什么关系的, Java Build Path是我们编译需要的包, 导入到lib下是程序运行时需要的包 ,  ...

  5. 用pyqt5做一个能python程序能插入图片的ide

    之前只是放到github上了,现在一想应该开源,大家想继续做好这个ide的都能从这里起步. #注意在.py文件相同目录下放一个1.png做测试图片 #本质就是用html来实现图片 #写在前面的话:这个 ...

  6. smrtlink

    SMRT Link is the web-based end-to-end workflow manager for the Sequel™ System. It includes software ...

  7. 安装指定版本的docker

    安装 Docker 从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE. Docker CE 即社区免费版,Docker EE 即 ...

  8. 2018.08.19 NOIP模拟 number(类数位dp)

    Number 题目背景 SOURCE:NOIP2015-SHY-10 题目描述 如果一个数能够表示成两两不同的 3 的幂次的和,就说这个数是好的. 比如 13 是好的,因为 13 = 9 + 3 + ...

  9. hdu-1130(卡特兰数+大数乘法,除法模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1130 卡特兰数:https://blog.csdn.net/qq_33266889/article/d ...

  10. git分支删除

    1.列出本地分支: git branch 2.删除本地分支: git branch -D BranchName 其中-D也可以是--delete,如: git branch --delete Bran ...