Мне нужно вытащить из планировщика задач все файлы, которые им запускаются при старте системы, почитал много методов, но везде используются сторонние библиотеки не входящие в стандартную поставку студии, нашел где лежат сами файлы планировщика, это по виду обычные xml, но без расширения. c:\Windows\System32\Tasks\ это для win7, вопрос как мне их увидеть программно. Вот стандартно делаю. К сожалению другого пути как вытащить запускаемые при старте системы из планировщика не нашел.
string path = @"c:\Windows\System32\Tasks\ ";
// смотрим есть ли файлы с таким расширением
string[] filesname = Directory.GetFiles(path, "*.*");
Console.WriteLine(String.Join(" ",filesname));
Вместо того, чтобы парсить 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);
}
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости