转载地址: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;

第一种方法:

  1. // Get the service on the local machine

  2. TaskService ts = new TaskService();

  3. // Create a new task definition and assign properties

  4. TaskDefinition td = ts.NewTask();

  5. td.RegistrationInfo.Description = "wei kong";

  6. // Add a trigger that will fire the task at this time every other day

  7. DailyTrigger dt = (DailyTrigger)td.Triggers.Add(new DailyTrigger { DaysInterval = 1 });

  8. //设置任务起始时间

  9. dt.StartBoundary = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 09:40:00"));

  10. //设置重复任务间隔时间

  11. dt.Repetition.Interval = TimeSpan.FromDays(1);

  12. // Create an action that will launch Notepad whenever the trigger fires

  13. td.Actions.Add(new ExecAction(@"C:\AutoDownTvInfo.exe", "", null));//这里可参考http://blog.csdn.net/kongwei521/article/details/51793036下载

  14. // Register the task in the root folder

  15. ts.RootFolder.RegisterTaskDefinition(@"Test", td);

  16. Thread.Sleep(2000);

  17. Console.WriteLine("计划任务结束" + DateTime.Now);

  18. Thread.Sleep(2000);

第二种方法:

使用方法:

var compath = AppDomain.CurrentDomain.BaseDirectory +"AutoDownTvInfo.exe";//这里可参考http://blog.csdn.net/kongwei521/article/details/51793036下载

CreateTaskScheduler("kong wei", "AutoDownTvInfo", compath, "500");

  1. /// delete task

  2. /// </summary>

  3. /// <param name="taskName"></param>

  4. private static void DeleteTask(string taskName)

  5. {

  6. TaskSchedulerClass ts = new TaskSchedulerClass();

  7. ts.Connect(null, null, null, null);

  8. ITaskFolder folder = ts.GetFolder("\\");

  9. folder.DeleteTask(taskName, 0);

  10. }

  11. /// <summary>

  12. /// get all tasks

  13. /// </summary>

  14. public static IRegisteredTaskCollection GetAllTasks()

  15. {

  16. TaskSchedulerClass ts = new TaskSchedulerClass();

  17. ts.Connect(null, null, null, null);

  18. ITaskFolder folder = ts.GetFolder("\\");

  19. IRegisteredTaskCollection tasks_exists = folder.GetTasks(1);

  20. return tasks_exists;

  21. }

  22. /// <summary>

  23. /// check task isexists

  24. /// </summary>

  25. /// <param name="taskName"></param>

  26. /// <returns></returns>

  27. public static bool IsExists(string taskName)

  28. {

  29. var isExists = false;

  30. IRegisteredTaskCollection tasks_exists = GetAllTasks();

  31. for (int i = 1; i <= tasks_exists.Count; i++)

  32. {

  33. IRegisteredTask t = tasks_exists[i];

  34. if (t.Name.Equals(taskName))

  35. {

  36. isExists = true;

  37. break;

  38. }

  39. }

  40. return isExists;

  41. }

  42. /// <summary>

  43. /// create task

  44. /// </summary>

  45. /// <param name="creator"></param>

  46. /// <param name="taskName"></param>

  47. /// <param name="path"></param>

  48. /// <param name="interval"></param>

  49. /// <returns>state</returns>

  50. public static _TASK_STATE CreateTaskScheduler(string creator, string taskName, string path, string interval)

  51. {

  52. try

  53. {

  54. if (IsExists(taskName))

  55. {

  56. DeleteTask(taskName);

  57. }

  58. //new scheduler

  59. TaskSchedulerClass scheduler = new TaskSchedulerClass();

  60. //pc-name/ip,username,domain,password

  61. scheduler.Connect(null, null, null, null);

  62. //get scheduler folder

  63. ITaskFolder folder = scheduler.GetFolder("\\");

  64. //set base attr

  65. ITaskDefinition task = scheduler.NewTask(0);

  66. task.RegistrationInfo.Author = "kong wei";//creator

  67. task.RegistrationInfo.Description = "每天自动定时下载节目信息";//description

  68. //set trigger (IDailyTrigger ITimeTrigger) 设置小时/分/秒来实现

  69. // ITimeTrigger tt = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);

  70. // tt.Repetition.Interval = interval;// format PT1H1M==1小时1分钟 设置的值最终都会转成分钟加入到触发器

  71. //设置每天特定的时间来实现 IDailyTrigger tt = (IDailyTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY);

  72. tt.StartBoundary = "2016-11-15T10:15:00";

  73. //start time //set action

  74.  IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC);

  75. action.Path = path; task.Settings.ExecutionTimeLimit = "PT0S"; //运行任务时间超时停止任务吗? PTOS 不开启超时

  76. task.Settings.DisallowStartIfOnBatteries = false;//只有在交流电源下才执行

  77. task.Settings.RunOnlyIfIdle = false;//仅当计算机空闲下才执行

  78. IRegisteredTask regTask = folder.RegisterTaskDefinition(taskName, task, (int)_TASK_CREATION.TASK_CREATE, null, //user null,

  79. // password _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, ""); IRunningTask runTask = regTask.Run(null); return runTask.State;

  80. }

  81.  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(定时任务)实现定时自动下载相关推荐

  1. 利用CyberArticle定时自动下载保存博客的新文章

    /* 功能: 定期将博客中新增的文章,保存到 [博客集合] 书籍中. 注意: 对于Windows Vista/7系统,如果您开启了账户控制,第一次运行本脚本的时候,请这样操作: 1:资源管理器,找到C ...

  2. SQL定时自动备份,并将备份文件加密压缩并自动下载的实现

    作为程序员或者数据库维护人员,可能大家经常 要做的事情就是备份数据库,并且为了安全起见最好是异地备份,但是如果要经常备份,然后把他们传到本地,是一件非常费时费力的事情,尤其像我这种比较懒的程序员,甚至 ...

  3. linux自动下载ftp文件夹,Linux 下FTP定时执行批量下载文件

    使用FTP定时批量下载指定文件的shell脚本 环境:centos6.9 1.目标FTP服务器地址 #FTP服务器地址 ip=10.19.15.23 2.FTP账号和密码 u=账号 p=密码 3.使用 ...

  4. mysql定时备份并上传ftp_Linux下定时任务实现mysql自动备份并上传远程ftp

    Linux下定时任务实现mysql自动备份并上传远程ftp 1.创建保存备份文件的目录:/home/mysql_data cd /home mkdir mysql_data 2.创建备份脚本文件:/h ...

  5. linux 程序定时重启tomcat,linux下实现tomcat定时自动重启

    tomcat自带的脚本中没有提供直接restart的模式,但是有start和shutdown两种模式.要实现restart模式,实际上只需要判断是否已经启动tomcat,若已经启动则限制性shutdo ...

  6. 建立apk定时自动打包系统第三篇——代码自动更新、APP自动打包系统

    我们的思路是每天下班后团队各成员在指定的时间(例如下午18:30)之前把各自的代码上传到SVN,然后服务器在指定的时间(例如下午18:30)更新代码.执行ant 打包命令.最后将apk包存放在指定目录 ...

  7. 间隔一段时间重复自动登录网站、定时自动登录网站的软件 —— 定时执行专家,无需复杂编程,简单配置即可使用

    常常有网友在网上发帖求助,想找一个定时自动登录网页(网站)的软件,大致需求如下: 1.打开网页 → 2.填写用户名.密码 → 3.点击登录按钮 → 4.登录成功 另外,还有诸如:要求间隔是每3个小时自 ...

  8. java实现windows壁纸自动下载与切换

    壁纸风波 许多有内涵的朋友都喜欢将自己的电脑桌面壁纸设置为美女图片,并且隔一段时间,自动更换,看起来十分炫酷.的确,用过windows的朋友们都知道,windows的个性化设置里面,可以将壁纸设置幻灯 ...

  9. python自动下载阿里云数据库数据_脚本自动下载阿里云每日备份数据库镜像

    脚本自动下载阿里云每日备份数据库镜像 背景 前端时间街道一个临时需求,要求根据每日的数据快照,统计计算出需要数据结果,并写入数据库,提供查询接口. 遇到两个自己没有尝试过的点: 阿里云导出的数据库是. ...

  10. 定时登录下载sftp服务器上的某些有规则的文件

    [root@1-live duizhangdan]# cat wget.sh #!/bin/bash #定时下载sina sftp服务器上的 bak_dir=`date -d"5 day a ...

最新文章

  1. 使用spring boot创建fat jar APP
  2. 32位微处理器的虚拟技术,是“坑爹”么!
  3. 错误:不能继续进行下一步操作 openfire 设置._如何为MacBook或Mac电脑恢复出厂设置...
  4. Linux 下, npm i 老是被killed 已杀死
  5. 大数据之Azkaban部署
  6. CornerNet: 将目标检测问题视作关键点检测与配对
  7. [转]你会做Web上的用户登录功能吗?
  8. java编译异常有哪些_java 中 哪些异常必须声明并捕获,否则产生编译错误
  9. leetcode(128)最长连续序列
  10. FR切换sheet时隐藏参数面板
  11. 【Django 2021年最新版教程7】前端html接收后端传递的变量值 渲染
  12. 设计模式之GOF23解释器模式
  13. windows下载安装cmake
  14. 百度AI之图像识别SDK:车牌识别
  15. 约束优化内罚函数c语言程序,约束优化惩罚函数法.pdf
  16. mysql ndb同步_MySQL NDB Cluster 7.5.16 部署OGG同步
  17. [USACO Hol10] 政党
  18. 创建虚拟机、安装centos6,centos7系统,图形化界面
  19. R中两种常用并行方法——2. snowfall
  20. Windows下的免安装版MySQL配置

热门文章

  1. SPSS缺失值处理【SPSS 009期】
  2. 学术会议查询 边缘计算_我设计了可以预测边缘性的“学术不诚实”的AI系统(SMART课堂)...
  3. linux dprintk 日志,linux內核調試中的printk()函數詳解
  4. PackagesNotFoundError: The following packages are not available from current channels: - python=3
  5. python输出欢迎某某某_Python基础中所出现的异常报错总结,python基础总结
  6. python vimdiff_Vim实践与学习-09其他
  7. tensorflow python3编程_PixelCNN++实现:基于 Python3 和 TensorFlow
  8. php table td边框,怎样对table和td技巧性设置表格边框
  9. 利用pil库处理图像
  10. HDU 4059 The Boss on Mars(容斥原理)