2011-11-03 18 views
8

Estoy tratando de escribir un formulario simple en C# que ejecutará una tarea programada en algunas computadoras. amolar el que tengo hasta ahora es:C# iniciar una tarea programada

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

Por alguna razón esto no funciona (IE - la tarea programada no se ha iniciado). Intenté ejecutar desde cmd esto:

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

y funcionó bien. ¿Alguna sugerencia? ¡GRACIAS!

+0

"Por alguna razón": ¿por qué? Podría ser cualquier cosa. ¿Tienes algún mensaje de error? Cuando ejecuta este código en el depurador, 'Process.Start' devuelve un valor, es decir, ¿el proceso? – ChrisF

+0

¿Ha confirmado que la cadena para iniciar termina idéntica a lo que prueba en el símbolo del sistema? –

Respuesta

0

utilizo lo siguiente, que funciona bien, puede ser de ayuda (enchufar sus argumentos)

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

sugiere emplear una de las envolturas de .NET para el programador de tareas.

He usado this one en el pasado para un buen efecto.

0

usando Microsoft.Win32.TaskScheduler;

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