首先在项目中添加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. 如何把一个vue组件改为ionic/angular组件

    同是mvvm框架,他们之间是很相似的,如何你已经熟悉其中的一个,那么另一个也就基本上也就会的差不多了. 一.动态属性.值.事件绑定 vue中使用v-bind:或者之间分号:进行绑定 ng中左括号[]进 ...

  2. [转]理解 Bias 与 Variance 之间的权衡----------bias variance tradeoff

    有监督学习中,预测误差的来源主要有两部分,分别为 bias 与 variance,模型的性能取决于 bias 与 variance 的 tradeoff ,理解 bias 与 variance 有助于 ...

  3. 误用WeakHashMap引起的死循环cpu跑满问题

    最近使用mvel 2.2.0.Final,出现一次cpu跑满,经过线程栈分析,发现是误用WeakHashMap引起的. 故障现场: 看WeakHashMap源码: public V get(Objec ...

  4. 2018-2019-2 20175211 实验二《Java面向对象程序设计》实验报告

    目录 代码托管 一.单元测试 (1)三种代码 二.TDD(Test Driven Development,测试驱动开发) 三.面对对象三要素 四.练习 五.问题及解决 六.PSP 代码托管 一.单元测 ...

  5. Oracle 12C 补丁升级

    升级步骤 Oracle 12.2.0.1升级至12.2.0.1.190115 1.阅读readme文件 2.检查更新opatch 3.备份程序 4.使用opatchauto工具进行数据库升级 5.打O ...

  6. fastjson序列化出现StackOverflowError

    今天在一个web项目里开发功能,记录日志用到了fastjson的序列化,把类型为RetreatRecord的数据对象序列化后打印出来.结果出现StackOverflowError.先贴出来异常堆栈: ...

  7. .NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?(转)

    .NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?  后端开发  作者: Rector  1973 阅读  0 评论  0 收藏  收藏本文 ...

  8. Anaconda spyder 设置tab键为2个空格

    tool -> Preference->

  9. JS33个概念

        JavaScript开发者应懂的33个概念 简介 这个项目是为了帮助开发者掌握 JavaScript 概念而创立的.它不是必备,但在未来学习(JavaScript)中,可以作为一篇指南. 本篇 ...

  10. Mac OS X 下安装使用 Docker (2017年7月)

    两年前的一篇 Mac OS X 下安装使用 Docker 安装时还是用的 boot2docker, 如今进化到了在 Mac OS X 下用 Docker Toolbox, 而且命令也由 boot2do ...