关于 c#:Cast 尝试创建新的 Task Scheduler 任务时出现异常

Cast exception when trying to create new Task Schedueler task

我正在尝试在 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)) .

这是所有代码,因此您无需点击上述链接即可看到我在此执行的操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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,"");

抛出异常的行是这个

1
ITimeTrigger Trigger = (ITimeTrigger)Task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY);

异常消息对我来说有点道理,但恐怕我对 COM 的了解还不够,无法真正知道从哪里开始。

另外,我应该补充一点,我使用的是 VS 2010,我必须将项目设置为用于 x86 或 x64 CPU,而不是通常的"任何 CPU",因为它一直给我一个 BadImageFormatException。我怀疑这与我当前的问题有关,但以防万一我认为我不妨提一下。


您正在使用不同的枚举值,对于 TASK_TRIGGER_DAILY,您将得到一个 IDailyTrigger,而不是 ITimeTrigger

请参阅此 MSDN 页面。