delphi ITaskFolder.RegisterTaskDefinition不起作用 [英] delphi ITaskFolder.RegisterTaskDefinition not working

查看:179
本文介绍了delphi ITaskFolder.RegisterTaskDefinition不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建Windows任务计划程序的任务.这是代码.

 过程TForm1.Button1Click(Sender:TObject);变种ts:ITaskService;tf:ITaskFolder;tf2:ITaskFolder;td:ITaskDefinition;tr:ITrigger;tt:ITimeTrigger;于:IAction;AE:IExecAction;rt:IRegisteredTask;开始CoInitializeEx(nil,COINIT_MULTITHREADED);CoCreateInstance(CLSID_TaskScheduler,nil,CLSCTX_INPROC_SERVER,IID_ITaskService,ts);ts.Connect(未分配,未分配,未分配,未分配);尝试tf:= ts.GetFolder('\ MyFolder');tf2:= tf;除了tf:= ts.GetFolder('\');tf2:= tf.CreateFolder('\ MyFolder',未分配);结尾;tf._Release;td:= ts.NewTask(0);td.RegistrationInfo.Author:='TheAuthor';tr:= td.Triggers.Create(ttTime);tr.QueryInterface(IID_ITimeTrigger,tt);tr._Release;tt.Id:='Trigger1';tt.StartBoundary:='2017-07-28T01:20:00';tt.EndBoundary:='2027-07-28T01:20:00';tt._Release;在:= td.Actions.Create(taExec);at.QueryInterface(IID_IExecAction,ae);at._Release;ae.Path:='C:\ Windows \ System32 \ Notepad.exe';ae.WorkingDirectory:='C:\ Windows \ System32';ae.Arguments:='--help';ae._Release;rt:= nil;rt:= tf2.RegisterTaskDefinition('MyTestTask',td,1,unassigned,unassigned,tlInteractiveToken,'');rt._Release;td._Release;tf2._Release;CoUninitialize;结尾; 

RegisterTaskDefinition 方法之前,它都可以正常工作.它返回nil,我认为这是一个错误,因为在 C:\ Windows \ System32 \ Tasks 的目录中未创建任何任务.目录 MyFolder 正在正确创建.但是我什至不能定义错误类型,因为在TaskScheduler api 2.0的Delphi版本中没有返回错误代码.似乎该函数的所有参数都是正确的,但是它将继续返回nil而不是IRegisteredTask对象.也许我忘记了什么,或者做错了什么?我在Windows 7和Delphi XE 10.2上工作.UAC已关闭.

解决方案

您正在呼叫 解决方案

You are calling the RegisterTaskDefinition method with TASK_VALIDATE_ONLY flag. That flag is described like:

TASK_VALIDATE_ONLY

Task Scheduler verifies the syntax of the XML that describes the task, but does not register the task. This constant cannot be combined with the TASK_CREATE, TASK_UPDATE, or TASK_CREATE_OR_UPDATE values.

So the call returns NULL pointer in the ppTask parameter because no task has been registered. If you weren't using magic constants and use proper defined constants like TASK_CREATE instead of 2 (or TASK_VALIDATE_ONLY instead of 1), you would find the problem pretty simply.

这篇关于delphi ITaskFolder.RegisterTaskDefinition不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆