Is there an option in possibly SCHTASKS to define where a scheduled job is actually created?
2 Answers
Instead of calling the SCHTASKS
I would recommend to use the .Net wrapper around the COM class TaskScheduler
, throught which you can interact with the Windows Task Scheduler. It required a bit more code but offers a rich set of properties and good control of the tasks. Doing so can use ITaskFolder
to create folders for your task(s). I include som of the code I use below (which will create a task called "MyTaskName" in the folder "MyTaskFolder". Also check out this article for good information on the subject.
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
);
Note that this will throw an exception if the folder already exists. Ypu can get the available folders using
ITaskFolderCollection folders = root.GetFolders(0);

- 1,294
- 2
- 13
- 19
-
2`TaskScheduler` is not really a .Net class. It's COM class that you can use from .Net. – svick Jun 19 '11 at 23:21
-
MSDN expresses it as a class, look at the topic "TaskScheduler Class" of this article: http://msdn.microsoft.com/en-us/library/system.threading.tasks.taskscheduler.aspx . You might be rights that its only a wrapper around a COM object, but I don't think its that obvious whether it is a class or not. – Avada Kedavra Jun 20 '11 at 07:14
-
that's completely different class! Notice that, for example, it doesn't have the `Connect()` method. The `TaskScheduler` you use in your code is actually an implementation of the COM interface [`ITaskService`](http://msdn.microsoft.com/en-us/library/aa381832.aspx). – svick Jun 20 '11 at 07:41
-
Aoouch, you are so right, im so wrong. Linking to the wrong class is embarrassing, at least... :( I'll update the answer to reflect on your input. And +1 to you. – Avada Kedavra Jun 20 '11 at 07:45
Simply use a path name in the task name string (/TN
parameter). For instance, /TN Foo\Bar
will create a task named Bar in the Foo folder.

- 248
- 3
- 11