C#+TaskScheduler(定时任务)实现定时自动下载
转载地址:https://blog.csdn.net/kongwei521/article/details/53185788
实现原理,客户是广电,在广电服务器创建一个FTP目录,然后每天自动从卫星上自动更新节目列表, 然后功能就是要每天定点一个时间自动跟FTP目录中前一天下载下来的节目信息进行时间和大小对比,如果有差异则自动下载覆盖,让插入到数据库中,因此就想到了两个办法:
1:用服务来实现 http://blog.csdn.net/kongwei521/article/details/51626589 http://blog.csdn.net/kongwei521/article/details/51793036
2:windows定时任务
经过一段时间观察用服务来实现的 下载时间会越来越靠后,感觉不靠谱就想用定时任务来替换。
最终使用 Microsoft.Win32.TaskScheduler 来实现了可以使用,另外两个 FluentScheduler Quartz.Net 来实现,
效果图:
代码:
新建一个控制台应用程序:
然后写代码:
using Microsoft.Win32.TaskScheduler;
第一种方法:
// Get the service on the local machine
TaskService ts = new TaskService();
// Create a new task definition and assign properties
TaskDefinition td = ts.NewTask();
td.RegistrationInfo.Description = "wei kong";
// Add a trigger that will fire the task at this time every other day
DailyTrigger dt = (DailyTrigger)td.Triggers.Add(new DailyTrigger { DaysInterval = 1 });
//设置任务起始时间
dt.StartBoundary = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 09:40:00"));
//设置重复任务间隔时间
dt.Repetition.Interval = TimeSpan.FromDays(1);
// Create an action that will launch Notepad whenever the trigger fires
td.Actions.Add(new ExecAction(@"C:\AutoDownTvInfo.exe", "", null));//这里可参考http://blog.csdn.net/kongwei521/article/details/51793036下载
// Register the task in the root folder
ts.RootFolder.RegisterTaskDefinition(@"Test", td);
Thread.Sleep(2000);
Console.WriteLine("计划任务结束" + DateTime.Now);
Thread.Sleep(2000);
第二种方法:
使用方法:
var compath = AppDomain.CurrentDomain.BaseDirectory +"AutoDownTvInfo.exe";//这里可参考http://blog.csdn.net/kongwei521/article/details/51793036下载
CreateTaskScheduler("kong wei", "AutoDownTvInfo", compath, "500");
/// delete task
/// </summary>
/// <param name="taskName"></param>
private static void DeleteTask(string taskName)
{
TaskSchedulerClass ts = new TaskSchedulerClass();
ts.Connect(null, null, null, null);
ITaskFolder folder = ts.GetFolder("\\");
folder.DeleteTask(taskName, 0);
}
/// <summary>
/// get all tasks
/// </summary>
public static IRegisteredTaskCollection GetAllTasks()
{
TaskSchedulerClass ts = new TaskSchedulerClass();
ts.Connect(null, null, null, null);
ITaskFolder folder = ts.GetFolder("\\");
IRegisteredTaskCollection tasks_exists = folder.GetTasks(1);
return tasks_exists;
}
/// <summary>
/// check task isexists
/// </summary>
/// <param name="taskName"></param>
/// <returns></returns>
public static bool IsExists(string taskName)
{
var isExists = false;
IRegisteredTaskCollection tasks_exists = GetAllTasks();
for (int i = 1; i <= tasks_exists.Count; i++)
{
IRegisteredTask t = tasks_exists[i];
if (t.Name.Equals(taskName))
{
isExists = true;
break;
}
}
return isExists;
}
/// <summary>
/// create task
/// </summary>
/// <param name="creator"></param>
/// <param name="taskName"></param>
/// <param name="path"></param>
/// <param name="interval"></param>
/// <returns>state</returns>
public static _TASK_STATE CreateTaskScheduler(string creator, string taskName, string path, string interval)
{
try
{
if (IsExists(taskName))
{
DeleteTask(taskName);
}
//new scheduler
TaskSchedulerClass scheduler = new TaskSchedulerClass();
//pc-name/ip,username,domain,password
scheduler.Connect(null, null, null, null);
//get scheduler folder
ITaskFolder folder = scheduler.GetFolder("\\");
//set base attr
ITaskDefinition task = scheduler.NewTask(0);
task.RegistrationInfo.Author = "kong wei";//creator
task.RegistrationInfo.Description = "每天自动定时下载节目信息";//description
//set trigger (IDailyTrigger ITimeTrigger) 设置小时/分/秒来实现
// ITimeTrigger tt = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
// tt.Repetition.Interval = interval;// format PT1H1M==1小时1分钟 设置的值最终都会转成分钟加入到触发器
//设置每天特定的时间来实现 IDailyTrigger tt = (IDailyTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY);
tt.StartBoundary = "2016-11-15T10:15:00";
//start time //set action
IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC);
action.Path = path; task.Settings.ExecutionTimeLimit = "PT0S"; //运行任务时间超时停止任务吗? PTOS 不开启超时
task.Settings.DisallowStartIfOnBatteries = false;//只有在交流电源下才执行
task.Settings.RunOnlyIfIdle = false;//仅当计算机空闲下才执行
IRegisteredTask regTask = folder.RegisterTaskDefinition(taskName, task, (int)_TASK_CREATION.TASK_CREATE, null, //user null,
// password _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, ""); IRunningTask runTask = regTask.Run(null); return runTask.State;
}
catch (Exception ex) { throw ex; } }
参考资料:
http://twinklers3.rssing.com/chan-3472162/all_p18.html
http://tzedeck.seesaa.net/article/388838290.html
http://ymlib.com/YMWorld/CS/P1/W3/P134/YMWCS134.html
C#+TaskScheduler(定时任务)实现定时自动下载相关推荐
- 利用CyberArticle定时自动下载保存博客的新文章
/* 功能: 定期将博客中新增的文章,保存到 [博客集合] 书籍中. 注意: 对于Windows Vista/7系统,如果您开启了账户控制,第一次运行本脚本的时候,请这样操作: 1:资源管理器,找到C ...
- SQL定时自动备份,并将备份文件加密压缩并自动下载的实现
作为程序员或者数据库维护人员,可能大家经常 要做的事情就是备份数据库,并且为了安全起见最好是异地备份,但是如果要经常备份,然后把他们传到本地,是一件非常费时费力的事情,尤其像我这种比较懒的程序员,甚至 ...
- linux自动下载ftp文件夹,Linux 下FTP定时执行批量下载文件
使用FTP定时批量下载指定文件的shell脚本 环境:centos6.9 1.目标FTP服务器地址 #FTP服务器地址 ip=10.19.15.23 2.FTP账号和密码 u=账号 p=密码 3.使用 ...
- mysql定时备份并上传ftp_Linux下定时任务实现mysql自动备份并上传远程ftp
Linux下定时任务实现mysql自动备份并上传远程ftp 1.创建保存备份文件的目录:/home/mysql_data cd /home mkdir mysql_data 2.创建备份脚本文件:/h ...
- linux 程序定时重启tomcat,linux下实现tomcat定时自动重启
tomcat自带的脚本中没有提供直接restart的模式,但是有start和shutdown两种模式.要实现restart模式,实际上只需要判断是否已经启动tomcat,若已经启动则限制性shutdo ...
- 建立apk定时自动打包系统第三篇——代码自动更新、APP自动打包系统
我们的思路是每天下班后团队各成员在指定的时间(例如下午18:30)之前把各自的代码上传到SVN,然后服务器在指定的时间(例如下午18:30)更新代码.执行ant 打包命令.最后将apk包存放在指定目录 ...
- 间隔一段时间重复自动登录网站、定时自动登录网站的软件 —— 定时执行专家,无需复杂编程,简单配置即可使用
常常有网友在网上发帖求助,想找一个定时自动登录网页(网站)的软件,大致需求如下: 1.打开网页 → 2.填写用户名.密码 → 3.点击登录按钮 → 4.登录成功 另外,还有诸如:要求间隔是每3个小时自 ...
- java实现windows壁纸自动下载与切换
壁纸风波 许多有内涵的朋友都喜欢将自己的电脑桌面壁纸设置为美女图片,并且隔一段时间,自动更换,看起来十分炫酷.的确,用过windows的朋友们都知道,windows的个性化设置里面,可以将壁纸设置幻灯 ...
- python自动下载阿里云数据库数据_脚本自动下载阿里云每日备份数据库镜像
脚本自动下载阿里云每日备份数据库镜像 背景 前端时间街道一个临时需求,要求根据每日的数据快照,统计计算出需要数据结果,并写入数据库,提供查询接口. 遇到两个自己没有尝试过的点: 阿里云导出的数据库是. ...
- 定时登录下载sftp服务器上的某些有规则的文件
[root@1-live duizhangdan]# cat wget.sh #!/bin/bash #定时下载sina sftp服务器上的 bak_dir=`date -d"5 day a ...
最新文章
- 使用spring boot创建fat jar APP
- 32位微处理器的虚拟技术,是“坑爹”么!
- 错误:不能继续进行下一步操作 openfire 设置._如何为MacBook或Mac电脑恢复出厂设置...
- Linux 下, npm i 老是被killed 已杀死
- 大数据之Azkaban部署
- CornerNet: 将目标检测问题视作关键点检测与配对
- [转]你会做Web上的用户登录功能吗?
- java编译异常有哪些_java 中 哪些异常必须声明并捕获,否则产生编译错误
- leetcode(128)最长连续序列
- FR切换sheet时隐藏参数面板
- 【Django 2021年最新版教程7】前端html接收后端传递的变量值 渲染
- 设计模式之GOF23解释器模式
- windows下载安装cmake
- 百度AI之图像识别SDK:车牌识别
- 约束优化内罚函数c语言程序,约束优化惩罚函数法.pdf
- mysql ndb同步_MySQL NDB Cluster 7.5.16 部署OGG同步
- [USACO Hol10] 政党
- 创建虚拟机、安装centos6,centos7系统,图形化界面
- R中两种常用并行方法——2. snowfall
- Windows下的免安装版MySQL配置
热门文章
- SPSS缺失值处理【SPSS 009期】
- 学术会议查询 边缘计算_我设计了可以预测边缘性的“学术不诚实”的AI系统(SMART课堂)...
- linux dprintk 日志,linux內核調試中的printk()函數詳解
- PackagesNotFoundError: The following packages are not available from current channels: - python=3
- python输出欢迎某某某_Python基础中所出现的异常报错总结,python基础总结
- python vimdiff_Vim实践与学习-09其他
- tensorflow python3编程_PixelCNN++实现:基于 Python3 和 TensorFlow
- php table td边框,怎样对table和td技巧性设置表格边框
- 利用pil库处理图像
- HDU 4059 The Boss on Mars(容斥原理)