Em vez de chamar o SCHTASKS
, eu recomendaria usar o wrapper .Net em torno da classe COM TaskScheduler
, através do qual você pode interagir com o Agendador de Tarefas do Windows. É necessário um pouco mais de código, mas oferece um rico conjunto de propriedades e um bom controle das tarefas. Fazer isso pode usar ITaskFolder
para criar pastas para sua (s) tarefa (s). Eu incluo som do código que eu uso abaixo (que irá criar uma tarefa chamada "MyTaskName" na pasta "MyTaskFolder". Também confira este artigo para uma boa informação sobre o assunto .
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
);
Observe que isso lançará uma exceção se a pasta já existir. Ypu pode obter as pastas disponíveis usando
ITaskFolderCollection folders = root.GetFolders(0);