首先在项目中添加windows服务

然后双击“MainService.cs”,在上面点右键“打开代码”

以下是我的实例代码

  partial class MainService : ServiceBase
{
int iHour = Convert.ToInt32(System.Configuration.ConfigurationSettings.AppSettings["HH"]);//开始时间小时
     int iMinute = Convert.ToInt32(System.Configuration.ConfigurationSettings.AppSettings["MM"]);//开始分钟
     int iSecond = Convert.ToInt32(System.Configuration.ConfigurationSettings.AppSettings["SS"]);//开始秒钟         public MainService()
        {
           InitializeComponent();
        }      /// <summary>
     /// 服务开启
     /// </summary>
        protected override void OnStart(string[] args)
        {
       System.Timers.Timer timer1 = neew System.Timers.Timer();
       timer1.Inteval = 1000;//1000毫秒即1秒
       timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);//达到任务时间时的执行事件
       timer1.AutoReset = true;//true为一直执行
       timer1.Enabled = true;
            WriteLog("MainService服务启动-------------->",true);
        }      private void timer1_Elapsed(object sender,System.Timers.ElapsedEventArgs e)
     {
       int inHour = e.SignalTime.Hour;
       int inMinute = e.SignalTime.Minute;
       int inSecond = e.SignalTime.Second;
       if(inHour == iHour && inMinute == iMinute && inSecond == iSecond)
       {//定时器时间到达我们规定的时间
          WriteLog("定时任务执行开始",true);
          try
          {
             //执行内容,你需要执行的代码
          }
          catch(Exception ex)
          {
            WriteLog("定时任务执行失败!",true);
            WriteLog("失败原因:" + ex.Message,false);
          }
          WriteLog("定时任务执行结束!",true);
       }
     }
     /// <summary>
     /// 服务关闭
     /// </summary>
        protected override void OnStop()         
     {          
       WriteLog("MainService服务关闭----------->",true);  
     }      /// <summary>
     /// 日志输出
     /// </summary>
     prevate void WriteLog(string content,bool isAddTime)
     {
       string txtPath = System.Configuration.ConfigurationSettings.AppSettings["LogPath"].ToString();//日志路径
     string txtFile = DateTime.Now.ToString("yyyyMMdd") + ".txt";
       if(!Directory.Exists(txtPath))
        Directory.CreateDirectory(txtPath);
       if(isAddTime)
       File.AppendAllText(txtPath + txtFile,DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":" + content + "\r\n"); 
       else
         File.AppendAllText(txtPath + txtFile,content + "\r\n");
     }
  }

项目中添加了ProjectInstaller.cs文件,该文件中视图自动会添加俩个组件

serviceProcessInstaller1

serviceInstaller1

可以看见项目中多了如下文件和组件,serviceProcessInstaller1、serviceInstaller1是自动生成的

设置组件serviceInstaller1的主要属性,ServiceName: 服务系统标识,在cmd命令中执行sr start/stop/query等等命令时候使用,用来唯一标识一个Window服务,这个千万要注意,别弄混了!

设置ServiceName的值, 该值表示在系统服务中的名称

设置StartType, 如果为Manual则手动启动,默认停止,如果为Automatic为自动启动

设置Description,添加服务描述

设置组件serviceProcessInstaller1的主要属性,Accout:账户类型,LocalSystem本地系统服务;

然后重新生成项目,生成成功!

/********************************************************************************************以下为安装*****************************************************************************************/

首先以管理员身份运行cmd(必须,否则会不成功),注,以下的v4.0.30319对应你项目使用的framework版本,若用的2.0版本则替换为v.2.0.50727

  输入: cd C:\Windows\Microsoft.NET\Framework\v4.0.30319  InstallUtil.exe  你的生成的windows服务exe路径(bin/debug中)

卸载   输入 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 InstallUtil.exe -u 你的生成的windows服务exe路径(bin/debug中)

/*************************************************************************************************************************************************************************************************/

因嫌以上的安装卸载太麻烦,我将安装卸载卸载了bat批处理文件中,如下

在windows服务类库中添加install.txt文件和uninstall.txt改名为install.bat和uninstall.bat,注意编码格式不要用utf-8,使用ANSI

在install.bat文件中写入以下代码

@echo off

set filename = "%~dp0你的windows服务名称.exe"

set servicename = 定义的服务名称

set Frameworkdc = %SystemRoot%\Microsoft.NET\Framework\v4.0.30319

if exist "%Frameworkdc%" goto netOld

:DispError

echo 您的机器上没有安装 .net Framework 4.0,安装即将终止

echo 您的机器上没有安装 .net Framework 4.0,安装即将终止 > InstallService.log

goto LastEnd

:netOld

cd %Frameworkdc%

echo 您的机器上安装了相应的.net Framework 4.0,可以安装本服务.

echo 您的机器上安装了相应的.net Framework 4.0,可以安装本服务 > InstallService.log

echo.

echo. >> InstallService.log

echo **************************

echo 安装服务 %filename%

%Frameworkdc%\InstallUtil.exe  %filename% >> InstallService.log

echo 启动服务

net start %servicename% >> InstallService.log

echo **************************

echo 操作结束,可以查看日志文件InstallService.log中具体的操作结果。

:LastEnd

pause

rem exit

我的写法是这样的:

@echo off
set filename="%~dp0服务类库名.exe"
set servicename=你的服务名称
set Frameworkdc=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319

if exist "%Frameworkdc%" goto netOld
:DispError
echo 您的机器上没有安装 .net Framework 4.0,安装即将终止.
echo 您的机器上没有安装 .net Framework 4.0,安装即将终止 >InstallService.log
goto LastEnd
:netOld
cd %Frameworkdc%
echo 您的机器上安装了相应的.net Framework 4.0,可以安装本服务.
echo 您的机器上安装了相应的.net Framework 4.0,可以安装本服务 >InstallService.log
echo.
echo. >>InstallService.log
echo *********************
echo 安装服务 %filename%
%Frameworkdc%\InstallUtil.exe %filename% >>InstallService.log
echo 启动服务
net start %servicename% >>InstallService.log
echo *********************
echo 操作结束,可以查看日志文件InstallService.log 中具体的操作结果。
:LastEnd
pause
rem exit

在uninstall.bat中写入以下代码

@echo off

set filename = "%~dp0生成ext名称.exe"

set servicename = 自定义的服务名称

set Frameworkdc = %SystemRoot%\Microsoft.NET\Framework\v4.0.30319

if exist "%Frameworkdc%" goto netOld

:DispError

echo 您的机器上没有安装 .net Framework 4.0,安装即将终止

echo 您的机器上没有安装 .net Framework 4.0,安装即将终止 > UnInstallService.log

goto LastEnd

:netOld

cd %Frameworkdc%

echo 您的机器上安装了相应的.net Framework 4.0,可以安装本服务

echo 您的机器上安装了相应的.net Framework 4.0,可以安装本服务 > UnInstallService.log

echo.

echo. >> UnInstallService.log

echo **************************

echo 停止服务

net stop %servicename% >> UnInstallService.log

echo 清理服务

%Frameworkdc%\Installutil.exe /u %filename% >> UnInstallService.log

echo 清理完毕

echo.

echo***************************

echo 操作结束,可以查看日志文件UnInstallService.log中具体的操作结果。

:LastEnd

pause

rem exit

我项目中的写法:

@echo off
set filename="%~dp0服务类库名称.exe"
set servicename=服务名称
set Frameworkdc=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319

if exist "%Frameworkdc%" goto netOld
:DispError
echo 您的机器上没有安装 .net Framework 4.0,安装即将终止.
echo 您的机器上没有安装 .net Framework 4.0,安装即将终止 >UnInstallService.log
goto LastEnd
:netOld
cd %Frameworkdc%
echo 您的机器上安装了相应的.net Framework 4.0,可以安装本服务.
echo 您的机器上安装了相应的.net Framework 4.0,可以安装本服务 >UnInstallService.log
echo.
echo. >>UnInstallService.log

echo *********************
echo 停止服务
net stop %servicename% >>UnInstallService.log
echo 清理服务
%Frameworkdc%\installutil.exe /u %filename% >>UnInstallService.log
echo 清理完毕
echo.
echo *********************
echo 操作结束,可以查看日志文件UnInstallService.log 中具体的操作结果。
:LastEnd
pause
rem exit

以上写法,win7与win8都没有问题,但是在win10中出现了安装成功,启动失败的情况,(.netframework版本原因)

附上简单的install.bar中

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe %~dp0文件名.exe

Net Start 服务名
Pause

uninstall.bat中

Net Stop 服务名

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u %~dp0文件名.exe

Pause

windows服务加定时器实现的更多相关文章

  1. C#创建windows服务搭配定时器Timer使用实例(用代码做,截图版)

       功能说明:C#创建一个windows服务,服务启动时D:\mcWindowsService.txt写入数据,服务运行期间每隔两秒写入当前时间. 原理这些就不说了,三语两语说不清楚,直接贴一个实例 ...

  2. 不用写Windows服务实现定时器功能(FluentScheduler )

    MacBook Pro 只有四个 USB Type-C 接口是否错了? 一项新技术的诞生总会对已存在的事物造成冲击或影响,如果大家都害怕冲击与影响,那这个世界永远像现在不变就行了,大家都好好的,待在自 ...

  3. 解决windows 服务中定时器timer 定时偶尔失效 问题

    最近做个windows 服务,功能是:定时执行一个任务:自动登录到一个网站后,点击相关网面上的按钮button. 在处理的过程中发现定时器老是不定时的失效,失效时间没有规律. 由于刚开始处于测试阶段, ...

  4. ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器

    ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器一:闲谈一下:1.现在任务跟踪管理系统已经开发快要结束了,抽一点时间来写一下,想一想自己就有成就感啊!!  ...

  5. c# 在windows服务中 使用定时器

    由于最近做自动执行的程序,开始做windows服务程序, 在windows服务中如何使用定时器的时候一直失效, 以前是直接拖入timer控件,但是不能直接运行,后来在网上找了一段程序,好使了. //开 ...

  6. 在windows服务中使用定时器

    在windows服务中,利用winform中直接拖动timer控件的方式使用定时器是不可以的,启动服务后会发现定时器并没有执行.那么在windows服务中如何使用定时器呢?  不使用直接拖动控件的方式 ...

  7. 在Windows服务中添加定时器

    创建windows服务: 在VisualStudio中用C#创建一个Windows服务,微软MSDN参考地址: http://msdn.microsoft.com/zh-cn/library/zt39 ...

  8. 安装MongoDB(做成Windows服务)并加载C#驱动程序

    一 Mongodb简介: 通过查询网上的一些信息来介绍一下Mongodb的优势:MongoDB是一个面向文档的数据库,目前由10gen开发并维护,它的功能丰富,齐全,完全可以替代MySQL.在使用Mo ...

  9. Windows服务的安装及配合定时器编写简单的程序

    最近要实时统计一些数据,所以就用到了Windows服务及定时任务,在这里记录下. Windows Service简介: 一个Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应 ...

随机推荐

  1. ionic3 添加多个自定义组件

    往往我们创建自定义组件一般都不止只会创建一个自定义组件,创建多个方式如下. 1.创建自定义组件 ionic g component select-car-no ionic g component ae ...

  2. Spring Boot 对请求的映射

    在SpringBoot中对请求资源的映射有三种方式: 1.通过编写一个Controller请求,获得客户端发送过来的请求就转发出去 //通过这种方式可以来映射页面请求路径 @PostMapping(& ...

  3. django 缓存信号等

    参考别人的博客:写的挺好 http://www.cnblogs.com/wupeiqi/articles/5246483.html

  4. 报错处理——# Creating Server TCP listening socket *:6379: bind: Address already in use

    在启动redis时报错 # Creating Server TCP listening socket *:6379: bind: Address already in use 错误原因 6379地址已 ...

  5. 使用jEnv在Mac/Linux环境配置多版本Java

    jEnv 是什么? 先来看一下官方介绍 jEnv is a command line tool to help you forget how to set the JAVA_HOME environm ...

  6. 2018-2019-2 网络对抗技术 20165321 Exp6 信息搜集与漏洞扫描

    1.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 2.实践内容 (1)各种搜索技巧的应用 百度查找IP地址: 查了一下kali的IP地址 https://fofa.so/的使用: 查询了一 ...

  7. face++静态库转为动态库

    前言 苹果商店上架应用,有规定支持iOS8.0以上的iPA可执行文件的大小不能超过60M. face++提供过来的是静态库,会导致苹果上架的ipa的包增加1.5M左右.而刚好我们的APP包Mach-O ...

  8. 让我怀疑人生的bug集合

    bug1:一个人人都知道全局变量易污染,但是我就是污染不了的问题 解决:刚开始动用了session来存这个值,后来觉得太小题大做了,最后使用了闭包来解决,第一个function结束后开启第二个,起初没 ...

  9. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'multipartResolver': Failed to introspect bean class [org.springframework.web.multipart.commons.CommonsMultipartR

    在用spring mvc 做文件上传的时候出现了这个问题(能看到这篇文章就说明你已经有了那两个包了) 错误:org.springframework.beans.factory.BeanCreation ...

  10. 爬取豆瓣电影影评,生成wordcloud词云,并利用监督学习根据评论自动打星

    本文的完整源码在git位置:https://github.com/OceanBBBBbb/douban-ml 爬取豆瓣影评 爬豆瓣的影评比较简单,豆瓣没有做限制,甚至你都不用登陆就可以看全部,我这里用 ...