转载自: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. springmvc与struts2的不同

    1.springmv的入口是一个servlet,即前端控制器.而struts2入口是一个fliter过滤器. 2.springmvc是基于开发方法(一个url对应一个方法,通过注解的方式进行访问),请 ...

  2. 无法更新 EntitySet 因为它有一个 DefiningQuery

    DbFirst 使用 MVC+EF+仓储+ADO.NET实体数据模型 无法更新 EntitySet“Book”,因为它有一个 DefiningQuery definingqueryentityfram ...

  3. cvc-complex-type.2.4.a: Invalid content was found starting with element 'init-param'.

    笔者最近学习一些spring mvc,在复制别人代码的时候报这个错.报错来源web.xml,原因是不符合xsd对xml的约束 源文件 <?xml version="1.0" ...

  4. mRemoteNG

    mRemoteNG 1.摆脱了mstsc那种一个程序一个界面的模式,采用了左边树+右边Tab页的显示形式,让你在一个mRemote界面中,可以连接多个远程桌面,再也不用为切来切去而烦恼了(如上图). ...

  5. JAVA Get UUID

    UUID是通用唯一标识码(Universally Unique Identifier),通过开源软件基金会(OSF)设立的一种算法生成.它的主要作用就是保证生成的字符串在同一时空中所有机器上都是唯一的 ...

  6. 数据帮助类DBhelper的定义

    数据库帮助类的使用DBhelperusing System;using System.Collections.Generic;using System.Text;using System.Data;u ...

  7. centos 挂载u盘

    1.创建一个目录来挂载U盘 mkdir /mnt/usb #创建usb目录挂载U盘 2.插上U盘,查看移动设备状态 fdisk -l #(注意:参数是小写字母 l 不是数字 1) 会看到类似这一行:/ ...

  8. Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8 整合例子

    转自:http://www.blogjava.net/wangxinsh55/archive/2011/07/24/354925.html   Jbpm4.4+hibernate3.5.4+sprin ...

  9. KBMMW 4.6 正式版发布

    喜大普奔迎新年! Merry Christmas! We are happy to announce the release of kbmMW v. 4.60.00 Professional and ...

  10. xampp环境 安装 用法 composer

    准备工作 1.打开PHP配置文件E:\xampp\php\php.ini确认以下模块已开启(移除前面的分号). extension=php_openssl.dll, extension=php_cur ...