Есть ли в SCHTASKS возможность определить, где на самом деле создается запланированное задание?
Вместо того, чтобы позвонить SCHTASKS
Я бы рекомендовал использовать оболочку .Net вокруг класса COM. TaskScheduler
, с помощью которого вы можете взаимодействовать с планировщиком задач Windows. Это требует немного больше кода, но предлагает богатый набор свойств и хороший контроль над задачами. При этом можно использовать ITaskFolder
для создания папок для ваших задач. Я включаю часть кода, который использую ниже (который создаст задачу под названием "MyTaskName" в папке "MyTaskFolder". Также проверьте эта статья для получения хорошей информации по этому вопросу.
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
);
Обратите внимание, что это вызовет исключение, если папка уже существует. Ypu может получить доступные папки, используя
ITaskFolderCollection folders = root.GetFolders(0);
Просто используйте имя пути в строке имени задачи (/TN
параметр). Например, /TN Foo\Bar
создаст задачу с именем Bar в папке Foo.