2011-11-03 11 views
8

J'essaie d'écrire un formulaire simple dans C# qui va exécuter une tâche planifiée sur certains ordinateurs. Whet J'ai jusqu'à présent est:C# démarrer une tâche planifiée

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

Pour une raison quelconque, cela ne fonctionne pas (IE - la tâche planifiée n'a pas commencé). J'ai essayé d'exécuter à partir de cmd ce:

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

et cela a bien fonctionné. Des suggestions? MERCI!

+0

"Pour une raison quelconque" - quelle raison? Ça pourrait être n'importe quoi. Avez-vous des messages d'erreur? Lorsque vous exécutez ce code dans le débogueur, 'Process.Start' renvoie-t-il une valeur, c'est-à-dire le processus? – ChrisF

+0

Avez-vous confirmé que la chaîne à démarrer est identique à celle que vous avez testée dans l'invite de commande? –

Répondre

0

J'utilise les éléments suivants qui fonctionne très bien, peut être utile (brancher vos arguments)

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

Je suggère d'utiliser l'un des wrappers .NET pour le planificateur de tâches.

J'ai utilisé this one dans le passé pour faire bon effet.

0

en utilisant Microsoft.Win32.TaskScheduler;

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