user1027429
user1027429

Reputation: 151

Start a scheduled task in C#

I'm trying to write a simple form in C# that will run a scheduled task one some computers.

What I have so far is:

private void button_Click(object sender, EventArgs e)
{
    try
    {

        for (int i = 0; i < num_of_computers; i++)
        {
            string line;
            line = (" /run /tn myTask /s " + _ReplacerObj.MyComputers[i] + " /u user s /p password");
            proc.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
            proc.FileName = @"C:\WINDOWS\SYSTEM32\schtasks.exe";
            proc.Arguments = line;
            Process.Start(proc);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString(), "Error Message!");
    }
}

For some reason, this doesn't work (IE - the scheduled task didn't start). I tried running from CMD this:

c:\windows\system32\schtasks.exe /run /tn myTask /s myIp /u user /p password

and it worked fine!

Any suggestions?

Upvotes: 15

Views: 38469

Answers (3)

dove
dove

Reputation: 20692

I use the following which works fine, may be of help (plugging in your arguments)

var p = new Process
    {
        StartInfo =
            {
                UseShellExecute = false,
                FileName = "SCHTASKS.exe",
                RedirectStandardError = true,
                RedirectStandardOutput = true,
                CreateNoWindow = true,
                WindowStyle = ProcessWindowStyle.Hidden,
                Arguments = arguments
            }
    };
p.Start();

Upvotes: 2

Oded
Oded

Reputation: 499382

I suggest using one of the .NET wrappers for the task scheduler.

I have used this one in the past to good effect.

Upvotes: 10

user3838082
user3838082

Reputation: 169

using Microsoft.Win32.TaskScheduler;

using (TaskService tasksrvc = new TaskService(@"\\" + servername, username, domain, password, true))
{       
    Task task = tasksrvc.FindTask(taskSchedulerName);
    task.Run();
}   

Upvotes: 10

Related Questions