Назад | Перейти на главную страницу

Как вы определяете, где создается запланированная задача?

Есть ли в 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.