我正在尝试在C#中的Windows任务计划程序中创建一个新任务。到目前为止我所拥有的只是http://bartdesmet.net/blogs/bart/archive/2008/02/23/calling-the-task-scheduler-in-windows-vista-and-windows-server-2008-from-managed-code.aspx
的复制和粘贴所有内容编译得很好,但是运行时我得到以下异常:
无法将“System .__ ComObject”类型的COM对象强制转换为接口类型“TaskScheduler.ITimeTrigger”。此操作失败,因为对IID为“{B45747E0-EBA7-4276-9F29-85C5BB300006}”的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULT异常:0x80004002(E_NOINTERFACE))
这是所有代码,所以你可以在不遵循上述链接的情况下看到我在这里做的事情。
TaskSchedulerClass Scheduler = new TaskSchedulerClass();
Scheduler.Connect(null, null, null, null);
ITaskDefinition Task = Scheduler.NewTask(0);
Task.RegistrationInfo.Author = "Test Task";
Task.RegistrationInfo.Description = "Just testing this out.";
ITimeTrigger Trigger = (ITimeTrigger)Task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY);
Trigger.Id = "TestTrigger";
Trigger.StartBoundary = "2010-05-12T06:15:00";
IShowMessageAction Action = (IShowMessageAction)Task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_SHOW_MESSAGE);
Action.Id = "TestAction";
Action.Title = "Test Task";
Action.MessageBody = "This is a test.";
ITaskFolder Root = Scheduler.GetFolder("\\");
IRegisteredTask RegisteredTask = Root.RegisterTaskDefinition("Background Backup", Task, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, "");
抛出异常的行是这一行
ITimeTrigger Trigger = (ITimeTrigger)Task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY);
异常消息对我有意义,但我担心我对COM的了解不足以真正知道从哪里开始。
另外,我应该补充说我正在使用VS 2010而且我必须将项目设置为x86或x64 CPU而不是通常的“Any CPU”,因为它一直给我一个BadImageFormatException。我怀疑这与我目前的问题有关,但万一我认为我不妨提及它。
答案 0 :(得分:2)
您正在使用不同的枚举值,对于TASK_TRIGGER_DAILY,您将获得IDailyTrigger
,而不是ITimeTrigger
。