在 SCHTASKS 中是否有一个选项可以定义计划作业的实际创建位置?
答案1
我建议不要调用,而是SCHTASKS
使用 .Net 包装器来包装 COM 类TaskScheduler
,通过它您可以与 Windows 任务计划程序进行交互。它需要更多的代码,但提供了一组丰富的属性和对任务的良好控制。这样做可以用来ITaskFolder
为您的任务创建文件夹。我在下面列出了我使用的部分代码(它将在文件夹“MyTaskFolder”中创建一个名为“MyTaskName”的任务)。另请查看这篇文章提供了有关该主题的有用信息。
TaskScheduler.TaskScheduler scheduler = new TaskScheduler.TaskScheduler();
scheduler.Connect(null, null, null, null); //run as current user.
ITaskDefinition taskDef = scheduler.NewTask(0);
taskDef.RegistrationInfo.Author = task.TaskAuthor;
...
ITimeTrigger trigger = (ITimeTrigger)taskDef.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
...
IExecAction action = (IExecAction)taskDef.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC);
...
ITaskFolder root = scheduler.GetFolder("\\");
root.CreateFolder("MyTaskFolder"); //// here
IRegisteredTask regTask = root.RegisterTaskDefinition(
"MyTaskName",
taskDef,
(int)_TASK_CREATION.TASK_CREATE_OR_UPDATE,
null, // user
null, // password
_TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, //User must already be logged on. The task will be run only in an existing interactive session.
"" //SDDL
);
请注意,如果文件夹已存在,这将引发异常。您可以使用以下方法获取可用文件夹
ITaskFolderCollection folders = root.GetFolders(0);
答案2
只需在任务名称字符串(参数)中使用路径名即可/TN
。例如,/TN Foo\Bar
将在 Foo 文件夹中创建一个名为 Bar 的任务。