2011-11-03 97 views
8

我想在c#中编写一个简单的表单,它将在一台计算机上运行一个计划任务。 磨我至今是:C#启动一个计划任务

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!"); 
     } 

出于某种原因,这并不工作(IE - 计划任务没有启动)。我试图从cmd运行这个:

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

它工作正常。 有什么建议吗? 感谢!

+0

“出于某种原因” - 什么原因?它可能是任何东西。你有任何错误消息?当您在调试器中运行此代码时,Process.Start会返回一个值 - 即Process? – ChrisF

+0

您是否确认要开始的字符串与您在命令提示符下测试的内容完全相同? –

回答

0

我用它工作正常以下,可能会有所帮助

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

我建议使用的任务调度的.NET包装的一个(在你的论点堵塞)。

我以前用过this one的效果很好。

0

using Microsoft.Win32.TaskScheduler;

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