IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Créer une task avec Task Scheduler Windows (depuis du code C#)


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 26
    Points : 24
    Points
    24
    Par défaut Créer une task avec Task Scheduler Windows (depuis du code C#)
    Bonjour tout le monde,

    J'aimerais faire un petit programme qui s'interface avec le Task Scheduler de windows XP. C'est à dire, pouvoir créer une scheduled task depuis mon programme, et ensuite pouvoir la modifier (si besoin est) directement depuis le programme de windows.

    J'ai trouvé ce code sur le net...mais il ne fonctionne pas.

    Class:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    using System;
    using System.Management;
    using System.Reflection;
     
    class ScheduleJob
    {
        public static uint Create(string Command, uint DaysOfMonth, uint DaysOfWeek,
        bool InteractWithDesktop, bool RunRepeatedly, string StartTime, // in DMTF format !
        out uint JobId)
        {
            // See: Platform SDK (or WMI SDK) doc's for detailed info about 'Win32_ScheduledJob' class
            ManagementBaseObject inputArgs = null;
            ManagementClass classObj = new ManagementClass(null, "Win32_ScheduledJob", null);
            inputArgs = classObj.GetMethodParameters("Create");
            inputArgs["Command"] = Command;
            inputArgs["DaysOfMonth"] = DaysOfMonth;
            inputArgs["DaysOfWeek"] = DaysOfWeek;
            inputArgs["InteractWithDesktop"] = InteractWithDesktop;
            inputArgs["RunRepeatedly"] = RunRepeatedly;
            inputArgs["StartTime"] = StartTime;
            // use late binding to invoke "Create" method on "Win32_ScheduledJob" WMI class
            ManagementBaseObject outParams = classObj.InvokeMethod("Create", inputArgs, null);
            JobId = ((uint)(outParams.Properties["JobId"].Value));
            return ((uint)(outParams.Properties["ReturnValue"].Value));
        }
        // Delete the Scheduled (JobID)
     
        public static uint Delete(uint JobID)
        {
            ManagementObject mo;
            ManagementPath path = ManagementPath.DefaultPath;
            path.RelativePath = "Win32_ScheduledJob.JobId=" + "\"" + JobID + "\"";
            mo = new ManagementObject(path);
            ManagementBaseObject inParams = null;
            // use late binding to invoke "Delete" method on "Win32_ScheduledJob" WMI class
            ManagementBaseObject outParams = mo.InvokeMethod("Delete", inParams, null);
            return ((uint)(outParams.Properties["ReturnValue"].Value));
        }
     
        public static string ToDMTFTime(DateTime dateParam)
        {
            string tempString = dateParam.ToString("********HHmmss.ffffff");
            TimeSpan tickOffset = TimeZone.CurrentTimeZone.GetUtcOffset(dateParam);
            tempString += (tickOffset.Ticks >= 0) ? '+' : '-';
            tempString += (Math.Abs(tickOffset.Ticks) / System.TimeSpan.TicksPerMinute).ToString("d3");
            return tempString;
        }
    }
    Main:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    uint JobID;
                DateTime dt = DateTime.Now; // Get current DateTime
                dt = dt.AddMinutes(1); //add 1 minute to current time
                string LocalDateTime = ScheduleJob.ToDMTFTime(dt); // convert to DMTF format
                // Schedule Notepad to run every Sunday and Wednesday
                uint ret = ScheduleJob.Create(
                    // @"runas /user:administrator\domain /profile cmd ",
                @"c:\winnt\notepad.exe",
                0, 32, true, true, LocalDateTime, out JobID);
                if (ret == 0) // sucess
                {
                    System.Console.WriteLine("Wait for Job to be scheduled and Press: <Enter> to delete");
                    System.Console.ReadLine(); // For test purposes - Wait for job to be scheduled.
                    ret = ScheduleJob.Delete(JobID); // Get rid of this Job
                }
                System.Console.WriteLine(ret);
    Est-ce que quelqu'un l'aurai déjà fait, ou aurai une idée?

    Merci de votre aide!

  2. #2
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Salut.

    Là tu tentes de créer des tâches planifiées avec WMI. Personnellement, j'avais opté pour cette solution mais je l'ai abandonnée car pas assez souple et surtout assez limitée (si mes souvenirs sont bons pas moyen de lui donner un nom explicite par exemple, ça reste du ATxx...).

    J'ai changé pour cette DLL et elle marche parfaitement, et notamment sur une machine distante (ce pourquoi j'avais choisi WMI).

    Bon courage

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 26
    Points : 24
    Points
    24
    Par défaut
    Merci pour ta réponse,

    J'ai déjà vu ce programme...

    Mais j'aimerai réussir à créer des tâches avec le WMI...

  4. #4
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Salut.

    En ce qui concerne la création, pour moi tes paramètres sont bons, mais lorsque tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ManagementBaseObject outParams = classObj.InvokeMethod("Create", inputArgs, null);
    Si la création a échoué, alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    outParams.Properties["JobId"].Value
    vaut null, donc impossible de l'affecter à JobId.

    A voir donc au débuggeur ce que te renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    outParams.Properties["ReturnValue"].Value
    et donne tes résultats Tu trouveras l'interprétation du résultat ici.

Discussions similaires

  1. [MediaWiki] Créer une page avec du contenue depuis un lien externe.
    Par CristianPop dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 30/03/2009, 21h16
  2. Réponses: 6
    Dernier message: 29/01/2008, 19h47
  3. Créer une grille avec centage
    Par lil_jam63 dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 16/08/2004, 17h21
  4. [Image]Créer une image avec JAVA 1.1
    Par burno dans le forum 2D
    Réponses: 4
    Dernier message: 11/08/2004, 10h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo