MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Как прочитать эти файлы в планировщике задач"
Answer 871220
Вместо того, чтобы парсить XML, лучше воспользоваться библиотекой COM-объектов планировщика задач. Она должна быть в составе ОС по крайней мере начиная с Windows 7.
//Reference: COM -> Task scheduler 1.1 type library using System; using System.Collections.Generic; using System.ComponentModel; using System.Text; using System.Runtime.InteropServices; using TaskScheduler; ... static void PrintFolder(ITaskFolder folder) //метод для рекурсивного обхода каталогов { IRegisteredTaskCollection coll = null; ITaskDefinition def = null; ITaskFolderCollection folders = null; IExecAction exec = null; try { coll = folder.GetTasks(0); //найдем задачи в каталоге foreach (IRegisteredTask item in coll) { if (def != null) { Marshal.ReleaseComObject(def); def = null; } if (exec != null) { Marshal.ReleaseComObject(exec); exec = null; } def = item.Definition; bool autostart = false; foreach (ITrigger trig in def.Triggers) { //нас интересуют только задачи, запускающиеся при включении или входе пользователя if (trig.Type == _TASK_TRIGGER_TYPE2.TASK_TRIGGER_BOOT || trig.Type == _TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON) { autostart = true; break; } } if (autostart) { //выведем информацию о задаче Console.Write( item.Name + " "); foreach (IAction act in def.Actions) { if (act.Type != _TASK_ACTION_TYPE.TASK_ACTION_EXEC) { Console.Write( "(" + act.Type.ToString() + ")"); } else { exec = (IExecAction)act; //выведем командную строку, запускаемую задачей Console.Write( "(" + exec.Path + " " + exec.Arguments + ")"); } } Console.WriteLine(); } } //обходим подкаталоги текущего каталога folders = folder.GetFolders(0); foreach (ITaskFolder item in folders) { PrintFolder(item); } } finally { if (coll != null) Marshal.ReleaseComObject(coll); if (def != null) Marshal.ReleaseComObject(def); if (folders != null) Marshal.ReleaseComObject(folders); if (exec != null) Marshal.ReleaseComObject(exec); } } public static void PrintTasks() { TaskScheduler.TaskScheduler ts = null; ITaskService its = null; ITaskFolder folder = null; try { ts = new TaskScheduler.TaskScheduler(); its = (ITaskService)ts; //подключаемся к локальной машине its.Connect(); //получаем корневой каталог задач folder = its.GetFolder("\\"); //рекурсивно выводим задачи PrintFolder(folder); } finally { if (folder != null) Marshal.ReleaseComObject(folder); if (its != null) Marshal.ReleaseComObject(its); if (ts != null) Marshal.ReleaseComObject(ts); } }
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.