2013-03-27 73 views
0

嗨我有一個程序,安排任務。雖然這在Windows7機器上運行良好,但會在XP上引發錯誤。Taskscheduler類不工作在XP

下面是代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using TaskScheduler; 

namespace MyTaskScheduler 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 
       string STR_DateTimeFormat = "yyyy-MM-dd HH:mm:ss"; 
       string taskName = "MyTask"; 
       string taskFolder = "MyTaskFolder"; 

       Console.WriteLine("Creating task"); 
       ITaskService taskScheduler = new TaskSchedulerClass(); 
       taskScheduler.Connect(null, null, null, null); 

       ITaskFolder rootFolder = taskScheduler.GetFolder(@"\"); 
       bool _found = false; 
       foreach (ITaskFolder fol in rootFolder.GetFolders(0)) 
       { 
        if (fol.Name == taskFolder) 
         _found = true; 
       } 
       if (!_found) 
        rootFolder.CreateFolder(taskFolder, null); 
       ITaskFolder folder = rootFolder.GetFolder("\\" + taskFolder); 

       _found = false; 
       foreach (IRegisteredTask tsk in folder.GetTasks(0)) 
       { 
        if (tsk.Name == taskName) 
         _found = true; 
       } 
       if (_found) 
        folder.DeleteTask(taskName, 0); 

       Console.WriteLine("Creating new task"); 
       ITaskDefinition taskDef = taskScheduler.NewTask(0); 
       taskDef.RegistrationInfo.Description = "Opens notepad at the scheduled times"; 
       taskDef.RegistrationInfo.Author = "Monica"; 
       taskDef.Settings.Enabled = true; 
       taskDef.Settings.Hidden = false; 
       taskDef.Settings.DisallowStartIfOnBatteries = false; 
       taskDef.Settings.WakeToRun = true; 

       IWeeklyTrigger trigger = (IWeeklyTrigger)taskDef.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_WEEKLY); 
       //if (intWeekDays != 0) 
       trigger.DaysOfWeek = (short)10; 
       trigger.Id = "MyTimeSet"; 
       trigger.StartBoundary = DateTime.Now.Date.AddHours(10).AddMinutes(15).AddSeconds(20).ToString(STR_DateTimeFormat.Replace(" ", "T")); 

       IExecAction action = (IExecAction)taskDef.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC); 
       action.Id = "MyRun"; 

       string actionFile = "notepad.exe"; 

       action.Path = String.Concat("\"", actionFile, "\""); 

       action.Arguments = String.Format("argus \"{0}\"", "argument1"); 

       IRegisteredTask regTask = null; 

       regTask = folder.RegisterTaskDefinition(taskName, taskDef, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_NONE, ""); 

       Console.WriteLine("task created");     
      } 
      catch (Exception e1) 
      { 
       Console.WriteLine(e1.ToString()); 
      } 
     } 
    } 
} 

當我運行XP機器上這個節目,我得到的錯誤是:

System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class  factory for component with CLSID {0F87369F-A4E5-4CFC-BD3E-73E6154572DD} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). at TaskScheduler.Program.Main(String[] args) 

可有人提醒我要去哪裏錯在這裏。

感謝, 莫妮卡

回答

3

Task Scheduler 2.0接口,該代碼使用,且只能從Windows Vista開始。此代碼將永遠不能在Windows XP上運行。

回退選項將使用Task Scheduler 1.0接口,但由於可用功能的差異可能不夠。在這種情況下,你無能爲力,因爲操作系統根本不提供你需要的服務。

+0

嗨喬恩謝謝。但是因爲我需要該程序在XP上運行。有沒有辦法使用Task Schduler 1.0。我不介意改進代碼以適應Task Scheduler 1.0接口參數,只要我能夠安排任務即可。如何導入Task Scheduler 1.0接口 – Monica 2013-03-27 23:17:12