如何创建Windows网络计划任务

      在我们的日常工作中,我们有时希望程序在指定的时间执行,以为成特定的任务。如对数据库的自动备份、磁盘文件的自动清理等。WINDOWS计划任务就是实现这个功能的一个好工具。

      WINDOWS计划任务分为两种,一种是本地的计划任务(Task Schedule),该类任务我们可以在WINDOWS"控制面板"下的"计划任务"中利用"计划任务向导"进行创建。另一种就是网络的计划任务(Net Schedule),该类任务与在WINDOWS命令行下的"at"命令等价。通过我查阅资料了解到,两类计划任务可谓各有优缺点。本地计划任务在功能上更加强大,相比起网络计划任务,它提供了更多的接口让用户进行设置。不过创建该类计划任务时必须输入系统中存在的用户名和密码才行,如果不输入或者输入了错误的用户名和密码,计划任务虽然能够创建成功,但是却不能正确的执行。相比本地计划任务,网络计划任务则没有上述限制,只要你当前的用户属于管理员组,就可以成功的创建网络计划任务,并且该任务会在所设定的时间正确的执行。当然,无论对于哪种类的计划任务,在你创建计划任务的时候必须打开"TaskScheduler"服务才行,否则无论创建何种类的计划任务都是无法成功的。

     既然了解了计划任务的基本概念,那下面就让我们来看看微软为我们提供了哪些接口来实现对计划任务进行编程。

     1. 直接使用调用WINDOWS中的"at"命令或者是"schtasks"命令,该方法应该是最简单的。

     2. WMI(本地计划任务),该方法也还算比较简单。

     3. COM对象ITaskScheduler及其相关对象(本地计划任务)。

     4. COM对象ITaskService及其相关对象(本地任务计划) PS:该对象只在WINDOWS VISTA 和 WINDOWS 7下有效。

     5. 使用网络计划任务API(网络计划任务)

     在这些解决方案中,我选择了最后一种解决方案,因为这是唯一的一种不需要输入用户名和密码的计划任务。虽然该类计划任务在功能上比较弱,如其只能直接支持按周和月的方式定义计划任务,但我们仍能通过其它变通的方法实现需要的功能。

     下面让我们来看看利用API的方式创建计划任务会用到哪些函数和数据结构。

 

      NET_API_STATUS NetScheduleJobAdd(LPCWSTR ServerName, LPBYTE Buffer, LPDWORD jobID)

      函数描述:该函数创建将在系统未来时间中执行的计划任务。该函数需要目标计算机开启Task Scheduler服务。

      安全要求:只有管理员组的用户才能在在远程计算机上执行该函数。

      参数描述:Servername

                     [in]   指向远程主机名称的UNICODE字符串,该字符串必须以"//"(不包含引号)开头,如果该参数为NULL,则执行该函数的计算机为当前正在运行该程序的计算机。

      参数描述:Buffer

                     [in]   指向AT_INFO结构体的指针,该指针用来描述任务的信息。

      参数描述:JobId

                     [out] 新创建作业的ID号,该ID号仅仅在函数执行成功时有效 。

      返回值   :如果函数执行成功,则返回的值为NERR_Success。

                  :如果函数执行失败,则返回相应的系统错误执行代码。

 

 

 

 

      NET_API_STATUS NetScheduleJobGetInfo(LPCWSTR ServerName, DWORD JobID, LPBYTE *PointerToBuffer)

      函数描述:获取指定计算机上指定任务的信息,该函数需要目标计算机开启Task Scheduler服务。

      安全要求:只有管理员组的用户才能在在远程计算机上执行该函数。

      参数描述:ServerName

             [in]    同NetScheduleJobAdd。

      参数描述:JobID

     [in]    想要获取信息任务的ID号。

      参数描述:PointerToBuffer

     [out]  指向获取任务信息的AT_INFO结构体指针,请注意该缓冲区由系统分配,在你不需要该信息后,必须使用NetApiBufferFree函数释放。

      返回值   :如果函数执行成功,则返回的值为NERR_Success。

                  :如果函数执行失败,则返回相应的系统错误执行代码。

 

 

 

 

      下面让我们来看看与该函数相关的AT_INFO结构体,这是使用该函数的重点

       AT_INFO

       结构描述:该结构体包含作业的信息。当使用NetShceduleJobAdd函数创建一个新的任务时,该函数使用此结构体定义该任务的特性。当使用NetScheduleJobGetInfo函数获取任务信息时,使用该结构体接受信息。

       成员描述:

      DWORD_PTR JobTime

定义任务将在执行任务的那一天中的什么时刻执行。该时刻为执行该任务的计算机的本地时间。该时刻以午夜(00:00)为起点开始计算。该成员的单位为毫秒。如将该值设置为1000 * 60 * 60 * 17,则任务将在17:00执行。请注意任务只能精确到分钟执行。

      DWORD DaysOfMonth

定义代表月中天数的32位值,如在指定的位上设置为1,该任务会在月中指定的一天上执行。第一位对应月的第一天。按照以上解释,本来我认为可以在多位上置1,以使任务可以在指定的日期上执行。但是实际情况却不行,任务只会在最低位上置1的时间执行,如你将2,3位置位,则任务只会在该月的第二天执行,该

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值