.net 开发定时执行的windows服务
环境:win7+vs2010+Oracle11g+office2010(64位操作系统)
需求:开发定时执行的windows服务从数据库中查询数据下载到指定地址Excel中
一、添加新建项目——windows——windows服务

在vs中自动生成如下文件:

本服务需要添加的引用如下图:

1、文件Program.cs是应用程序的主入口点,有main方法指定进入方法Service1() :
/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1()
};
ServiceBase.Run(ServicesToRun);
}
}
2、文件Service1.cs中有启动,停止服务方法,可以在启动方法中调用你自己写的函数:
public Service1() { InitializeComponent(); }
protected override void OnStart(string[] args) { }
protected override void OnStop() { }
我的需求是定时执行,那就需要添加一个timer组件:
(1)可以在工具箱内拖拽
(2)在Service1.Designer.cs设计代码中手动添加一个: private System.Timers.Timer timer;
我要灵活的设置执行时间,那就需要添加一个配置文件:
添加新建项目——Visual C#项——应用程序配置文件:
app.config文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="DBType" value="Oracle" />
<!--下载Excel的时间,目前设置为每天23点执行一次-->
<add key="StartTime" value="23:00:00"/>
</appSettings>
<connectionStrings>//数据库连接设置
<add name="DefaultConnectionString" connectionString="Data Source=连接通配符;User ID=用户名;Password=密码;" providerName="System.Data.OracleClient"/>
</connectionStrings>
</configuration>
3、在Service1.cs文件中添加timer事件方法:
private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
try {
//判断当前时间是否是配置文件中服务要执行的时间
if (DateTime.Now.ToString("HH:mm:ss") == System.Configuration.ConfigurationSettings.AppSettings["StartTime"])
{ (sender as System.Timers.Timer).Interval = 23 * 60 * 60 * 1000.0; //将时间间隔改为23小时,23小时后重新发生timer_Elapsed事件。 ExcelFileDownload(); //服务所要做的主函数下载Excel(你的方法)
}
else
(sender as System.Timers.Timer).Interval = 1000;//时间间隔为1秒。
}
catch (Exception ex)
{ string err = ex.Message;
}
}
4、在Service1.Designer.cs文件InitializeComponent()方法中添加事件:
private void InitializeComponent()
{
this.timer = new System.Timers.Timer();
((System.ComponentModel.ISupportInitialize)(this.timer)).BeginInit();
//
// timer
//
this.timer.Enabled = true;
this.timer.Elapsed += new System.Timers.ElapsedEventHandler(this.timer_Elapsed);
//
// Service2
//
this.ServiceName = "Service1";
((System.ComponentModel.ISupportInitialize)(this.timer)).EndInit();
}
Service1.Designer.cs文件中方法如下图:

以上代码方面基本完成,windows服务就要安装到服务器上,要有安装文件EXE;
项目生成之后,双击Service1.cs打开设计页面后,右键,添加安装程序,会产生文件ProjectInstaller.cs,如下图:

双击ProjectInstaller.cs进入设计页面会看到2个类似组件的东西,如图:

分别右键——属性,进行设置:
serviceInstaller1设置,启动方式StartType,更改为Automatic;描述Description,最好填写一下服务要做的工作;ServiceName可以更改,描述和ServiceName在服务器的服务处会看到;如图设置:

serviceProcessInstaller1设置,把Account更改为LocalSystem,如图设置:

添加安装程序之后会在项目bin/debug 文件夹下产生WindowsServiceDownloadFile.exe等文件,这个就是安装文件。
自此服务就算开发完成,如何进行测试,跟踪
一、要把服务安装到计算机上
1.在你的系统找到C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727下面的InstallUtil文件。
2.把这个文件复制到你的exe项目文件去。(bin/debug 文件夹)
3.点击开始的运行,输入cmd。
4.用cd 你要安装服务器的文件路径(具体……bin/debug 文件夹)
5.输入installutil 你的服务名称(包含.exe) ,installutil和你的服务名称要加空格。
6.installutil 你的服务名称(包含.exe) -u可以删除服务。
安装完成之后,要到计算机管理——服务和应用程序——服务中找到你的服务,手动启动,之后就可以把服务附加到进程中进行debug跟踪调试,不过比较麻烦的是,每次更改程序都要停止卸载服务重新安装服务再进行调试。
注:如何生成windows服务安装包在另一篇文章中详细说明
注:如何从数据库查询数据下载到Excel中在另一篇文章中详细说明
.net 开发定时执行的windows服务的更多相关文章
- C#制作Windows service服务系列二:演示一个定期执行的windows服务及调试(windows service)
系列一: 制作一个可安装.可启动.可停止.可卸载的Windows service(downmoon原创) 系列二:演示一个定期执行的windows服务及调试(windows service)(down ...
- .Net 指定时间段内定时执行的Windows服务(System.Threading.Thread)
创建一个Windows服务项目:解决方案(右击)——> 添加 ——> 新建项目——>项目类型选择Windows——>模板选择Windows服务 ,如图: 编写Windows服务 ...
- 【.Net 学习系列】-- .Net 指定时间段内定时执行的Windows服务(System.Threading.Thread)
创建一个Windows服务项目:解决方案(右击)——> 添加 ——> 新建项目——>项目类型选择Windows——>模板选择Windows服务 ,如图: 编写Windows服务 ...
- bat实现每天定时执行命令[windows底下每天重启一下Nginx]
--试验通过--Windows环境脚本名称:restart.bat脚本内容: @echo offtaskkill /f /fi "IMAGENAME eq nginx.exe"cd ...
- Mac定时执行脚本_服务launchctl
Mac 设置自动执行定时任务, 步骤: 1. 编写plist 2.将plist放入该目录下 ~/Library/LaunchAgents 3.命令启动 添加: launchctl load /Syst ...
- 使用C#开发windows服务定时发消息到钉钉群_群组简单消息
前言:本提醒服务,是由C#语言开发的,主要由windows服务项目和winform项目组成,运行服务可实现功能:向钉钉自定义机器人群组里,定时,定次,推送多个自定义消息内容,并实现主要功能的日志记录. ...
- 使用Visual Studio 2015 Community 开发windows服务
昨天研究在.NET下开发Windows服务程序,期间遇到一些小问题,这里仅将自己的开发过程和需要注意的地方写下和广大网友分享…… 1.基础 Windows服务是指系统启动时能够自己运行的程序.W ...
- .net开发windows服务
最近一个月都异常的繁忙,项目进度非常的紧,回头看看自己的blog,整整一个5月都没有一篇文章,非常惭愧,现在补几篇文章,介绍一下我最近关注的技术.这篇文章将介绍Windows服务程序的开发.摘要:本文 ...
- C#开发人员能够可视化操作windows服务
使用C#开发自己的定义windows服务是一个很简单的事.因此,当.我们需要发展自己windows它的服务.这是当我们需要有定期的计算机或运行某些程序的时候,我们开发.在这里,我有WCF监听案例,因为 ...
随机推荐
- Dom对象和jQuery包装集
Dom对象 在传统的JavaScript开发中,我们经常都是首先获取Dom对象,比如: document.getElementById("dv1"); 我们经常使用getEleme ...
- jQuery学习资源参考教程网址推荐
jQuery官方主页:http://jquery.comjQuery中文入门指南:http://www.k99k.com/jQuery_getting_started.htmljQuery使用手册:h ...
- POJ2406 KMP算法
POJ2406 问题重述:给定字符串s0,记连续的k个s前后相连组成的s0s0...s0为s0^k.输入字符串S,求最大的k,使得S = s0^k. 问题分析: 1.采用kmp算法求出前缀函数 pre ...
- Ubuntu与Ubuntu系统之间的mount挂载
1.被挂载机 1>安装Ubuntu nfs apt-get install nfs-kernel-server 2>配置/etc/exports Ubuntu nfs允许挂载的目录及权限在 ...
- xcode5.1上真机调试报告No architectures to compile for...的解决办法
由于手头上只有一台IPAD一代,近期升级到IOS5.0了(人家apple只让升级到此为止)而开发环境Xcode版本是5.1,默认情况下XCode编译出来的代码最低能跑在IOS6.0下, 于是GOOGL ...
- Linux下*.tar.gz文件解压缩命令 find 命令
1.压缩命令: 命令格式:tar -zcvf 压缩文件名.tar.gz 被压缩文件名 可先切换到当前目录下.压缩文件名和被压缩文件名都可加入路径. 2.解压缩命令: 命令格式:tar -z ...
- pyqt5消息框QMessageBox
QMessageBox消息框有以下几种类型: QMessageBox.information 信息框 QMessageBox.question 问答框 QMessageBox.warning ...
- Global build settings
[ ] Select all packages by default *** General build options *** [ ] Show packages that require gr ...
- 【转】android service 之二(IntentService)
原文网址:http://rainbow702.iteye.com/blog/1143286 不管是何种Service,它默认都是在应用程序的主线程(亦即UI线程)中运行的.所以,如果你的Service ...
- JAVA车票管理系统(简单GUI)
一. 需求分析 1.设计题目:车票管理系统 用JAVA语言和数据结构知识设计设计车票管理系统.要求如下所述: 一车站每天有n个发车班次,每个班次都有一个班次号(1.2.3…n),固定的发车时间, ...