C # - Использование запланированных задач с Process.Start - PullRequest
4 голосов
/ 19 июня 2011

Я пытаюсь интегрировать оператор запланированного задания в Process.Start

Process.Start("schtasks.exe", "\"" + textBox1.Text + "\"");

Как можно добавить указанные ниже параметры в приведенный выше оператор Process.Start?

schtasks /Create /SC DAILY /TN TestJob /TR "C:\Program Files\test\test.exe 'C:\'"

Ответы [ 2 ]

9 голосов
/ 19 июня 2011

Вы можете напрямую взаимодействовать с диспетчером задач Windows, используя TaskScheduler.Это даст вам доступ ко всему спектру свойств задания и при каких условиях оно будет выполнено.Это, конечно, требует больше кода, но дает вам все необходимое управление управляемым образом .

Это фрагмент кода, который я использую сам, и он работаетхорошо (я сократил часть моей бизнес-логики, поэтому не все аргументы будут компилироваться / иметь смысл).По сути, он создаст задачу, которая будет выполняться через минуту:

    TaskScheduler.TaskScheduler scheduler = new TaskScheduler.TaskScheduler();
    scheduler.Connect(null, null, null, null); //run as current user.

    ITaskDefinition taskDef = scheduler.NewTask(0);
    taskDef.RegistrationInfo.Author = "Me me me";
    taskDef.RegistrationInfo.Description = "My description";
    taskDef.Settings.ExecutionTimeLimit = "PT10M"; // 10 minutes
    taskDef.Settings.DisallowStartIfOnBatteries = false;
    taskDef.Settings.StopIfGoingOnBatteries = false;
    taskDef.Settings.WakeToRun = true;

    ITimeTrigger trigger = (ITimeTrigger)taskDef.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);

    DateTime nextRun = DateTime.Now.AddMinutes(1); // one minute from now
    trigger.StartBoundary = nextRun.ToString("s", System.Globalization.CultureInfo.InvariantCulture);

    IExecAction action = (IExecAction)taskDef.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC);
    action.Id = "exe name";
    action.Path = "path to exe";
    action.WorkingDirectory = "working dir";
    action.Arguments = "app arguments";  /// <-- here you put your arguments..

    ITaskFolder root = scheduler.GetFolder("\\");

    IRegisteredTask regTask = root.RegisterTaskDefinition(
        "My task name",
        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
        );

Дополнительные объяснения и примеры кода можно найти здесь: Вызов планировщика задач в Windows Vista (и Windows Server 2008)управляемый код

0 голосов
/ 19 июня 2011

Проблема в том, что вам нужно дважды убежать.

Правильная команда в командной строке для:

schtasks /Create /SC DAILY /TN TestJob /TR "C:\Program Files\test\test.exe 'C:\'"

есть

schtasks /Create /SC DAILY /TN TestJob /TR "\"C:\\Program Files\\test\\test.exe\" \"C:\\\""

Значит, вам понадобится:

Process.Start("schtasks.exe", string.Format(@"/Create /SC DAILY /TN TestJob /TR """"{0}"" ""{1}""""", textBox1.Text.Replace("\", "\\"), @"C:\"));

(У вас нет под рукой компилятора, так что возможны опечатки, но вы должны понять.) Я делаю предположение, что textBox содержит путь к exe, не уверен, откуда поступает параметр или если это жестко закодировано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...