我正試圖創建一個任務到Windows任務調度器。這是代碼。delphi ITaskFolder.RegisterTaskDefinition不起作用
procedure TForm1.Button1Click(Sender: TObject);
var
ts: ITaskService;
tf: ITaskFolder;
tf2: ITaskFolder;
td: ITaskDefinition;
tr: ITrigger;
tt: ITimeTrigger;
at: IAction;
ae: IExecAction;
rt: IRegisteredTask;
begin
CoInitializeEx(nil, COINIT_MULTITHREADED);
CoCreateInstance(CLSID_TaskScheduler,nil,CLSCTX_INPROC_SERVER,IID_ITaskService,ts);
ts.Connect(unassigned, unassigned, unassigned, unassigned);
try
tf := ts.GetFolder('\MyFolder');
tf2 := tf;
except
tf := ts.GetFolder('\');
tf2 := tf.CreateFolder('\MyFolder', unassigned);
end;
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;
at := 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;
end;
它工作正常,直到RegisterTaskDefinition
方法。它返回零,我認爲這是一個錯誤,因爲我的目錄中沒有創建任何任務C:\Windows\System32\Tasks
。目錄MyFolder
正在創建。但我甚至無法定義錯誤類型,因爲在Delphi版本的TaskScheduler api 2.0中沒有返回錯誤代碼。看來函數的所有參數都是正確的,但它繼續返回nil而不是IRegisteredTask對象。也許我忘了什麼,或者做錯了什麼? 我在Windows 7和Delphi XE 10.2上工作。 UAC已關閉。
'flags == TASK_VALIDATE_ONLY',*任務計劃程序驗證描述該任務的XML的語法,但* ***不註冊該任務。***另一個受害者的魔法值:) – Victoria
謝謝,它的工作原理。我誤解了'flags'參數中必須有哪個值。我認爲TTaskCreation組中的值必須是validateonly爲0且create爲1的值。但是必須有根據msdn的值 - create是2. –