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 :

Le Planificateur de tâches n’a pas lancé la tâche


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 209
    Par défaut Le Planificateur de tâches n’a pas lancé la tâche
    Bonjour,

    J'ai une erreur d'exécution "Le Planificateur de tâches n’a pas lancé la tâche « \BackupManager_PROFIL 3 » car l’utilisateur « PCWIN1122H2\Administrateur » n'était plus connecté lorsque les conditions de lancement ont été remplies. Action de l’utilisateur : vérifier que l’utilisateur est connecté ou modifier la définition de la tâche pour autoriser le lancement lorsque l’utilisateur est déconnecté." alors que je demande d'exécuter la tâche de manière interactive avec le compte SYSTEM car autrement (en administrateur) ça ne fonctionne pas non plus.
    Pas besoin de vous dire que mon application est démarrée en administrateur.

    Je vous remercie pour votre aide.

    Voici mon code :

    Code C# : 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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
     
    public void CreateOrUpdateTask(BackupProfile profile)
    {
        if (!profile.IsScheduleEnabled || !profile.NextScheduledBackup.HasValue)
            return;
     
        string folderPath = "BackupManager";
        string taskName = $"{folderPath}\\{profile.Name}";
        string appPath = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
        string arguments = $"--run-backup \"{profile.Name}\"";
     
        // Créer le dossier s'il n'existe pas
        using (TaskService ts = new TaskService())
        {
            if (!ts.RootFolder.SubFolders.Exists(folderPath))
            {
                ts.RootFolder.CreateFolder(folderPath);
            }
        }
     
        // Formater la date et l'heure pour SCHTASKS
        DateTime startTime = profile.NextScheduledBackup.Value;
        string scheduledTime = startTime.ToString("HH:mm");
        string scheduledDate = startTime.ToString("dd/MM/yyyy");
     
        // Construire la commande SCHTASKS selon le type de planification
        string scheduleType;
        string interval = "";
     
        switch (profile.ScheduleType)
        {
            case BackupScheduleType.UneFois:
                scheduleType = "ONCE";
                break;
            case BackupScheduleType.Quotidien:
                scheduleType = "DAILY";
                interval = $"/MO {profile.ScheduleInterval}";
                break;
            case BackupScheduleType.Hebdomadaire:
                scheduleType = "WEEKLY";
                string dayOfWeek = startTime.DayOfWeek.ToString().ToUpper().Substring(0, 3);
                interval = $"/D {dayOfWeek} /MO {profile.ScheduleInterval}";
                break;
            case BackupScheduleType.Mensuel:
                scheduleType = "MONTHLY";
                int day = startTime.Day;
                interval = $"/D {day} /MO {profile.ScheduleInterval}";
                break;
            case BackupScheduleType.Horaire:
                scheduleType = "HOURLY";
                interval = $"/MO {profile.ScheduleInterval}";
                break;
            default:
                scheduleType = "ONCE";
                break;
        }
     
        // Créer la commande complète
        // /RL HIGHEST : Exécuter avec les privilèges les plus élevés
        // /RU SYSTEM : Exécuter en tant que SYSTEM (pas besoin de connexion utilisateur)
        string schtasksCmd = $"SCHTASKS /CREATE /F /TN \"{taskName}\" /TR \"\\\"{appPath}\\\" {arguments}\" /SC {scheduleType} {interval} /SD {scheduledDate} /ST {scheduledTime} /RL HIGHEST /RU SYSTEM /IT";
     
        System.Diagnostics.Debug.WriteLine($"Commande SCHTASKS: {schtasksCmd}");
        try
        {
            // Exécuter la commande
            ProcessStartInfo psi = new ProcessStartInfo
            {
                FileName = "schtasks.exe", // Exécution directe de SCHTASKS
                Arguments = $"/CREATE /F /TN \"{taskName}\" /TR \"\\\"{appPath}\\\" {arguments}\" /SC {scheduleType} {interval} /SD {scheduledDate} /ST {scheduledTime} /RL HIGHEST /RU SYSTEM /IT",
                UseShellExecute = false, // Nécessaire pour rediriger la sortie
                CreateNoWindow = true,
                RedirectStandardOutput = true,
                RedirectStandardError = true
            };
     
            using (Process process = Process.Start(psi))
            {
                string output = process.StandardOutput.ReadToEnd();
                string error = process.StandardError.ReadToEnd();
                process.WaitForExit();
     
                System.Diagnostics.Debug.WriteLine($"SCHTASKS Output: {output}");
                System.Diagnostics.Debug.WriteLine($"SCHTASKS Error: {error}");
     
                if (process.ExitCode == 0)
                {
                    System.Diagnostics.Debug.WriteLine($"Tâche créée avec succès: {taskName}");
                }
                else
                {
                    System.Diagnostics.Debug.WriteLine($"Erreur lors de la création de la tâche. Code de sortie: {process.ExitCode}");
                }
            }
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine($"Exception lors de la création de la tâche: {ex.Message}");
        }
    }

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 482
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 482
    Par défaut
    Tu as vérifié dans le planificateur de tâches si tes tâches étaient configurées comme tu le penses? parce qu'a priori ce n'est pas le cas, vu le message d'erreur.
    Est-ce que tes tâches ont besoin d'un accès à un dossier réseau ?
    Il me semble qu'une tâche lancée avec l'utilisateur SYSTEM ne peut pas être en mode interactif (et n'a pas accès à des ressources réseau)

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 209
    Par défaut
    Bonjour,

    Non ce n'est pas configuré comme je le souhaite (copie d'écran) alors qu'il me semble que je le demande utilisateur connecté ou non.
    Je ne demande pas accès à des ressources réseau et je m'aperçois qu'il y a une contradiction "IT" qui demande que l'utilisateur soit connecté alors je l'ai supprimé mais en vain.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 209
    Par défaut
    J'ai donc fait : string schtasksCmd = $"SCHTASKS / CREATE / F / TN "{taskName}" / TR "\\"{appPath}\\" {arguments}" / SC {scheduleType} {interval} /SD {scheduledDate} /ST {scheduledTime} / RL HIGHEST / RU SYSTEM"; et ça fonctionne bien finalement.

    Merci

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 209
    Par défaut
    Finalement ça marche bien en manuel dans l'invite de commande mais pas avec mon application.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 482
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 482
    Par défaut
    Quand tu dis que ça ne marche pas avec ton application, c'est quoi? la création de la tâche ? tu as bien retiré le /IT dans ton application?
    le AppPath pointe sur une application présente sur le lecteur C ?

    PS: on n'a pas vu la capture, mais ce n'est peut-être pas grave finalement.

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 209
    Par défaut
    Bonjour,

    Dans les 3 captures, on voit le résultat via l'invite de commande, celui via mon application et la copie de la commande via l'invite de commande.

    Nom : cmd.png
Affichages : 24
Taille : 29,7 Ko
    Nom : planificateur_cmd.png
Affichages : 23
Taille : 38,7 Ko
    Nom : planificateur_app.png
Affichages : 23
Taille : 43,7 Ko

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 482
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 482
    Par défaut
    via ton application, il n'y a pas de tâches créés? ou celle-ci n'a pas les bons paramètres?

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 209
    Par défaut
    Je viens de résoudre le problème en créant un service Windows et ça fonctionne super bien.

    Merci beaucoup

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/07/2012, 16h26
  2. Réponses: 2
    Dernier message: 02/12/2010, 17h54
  3. Réponses: 9
    Dernier message: 30/06/2008, 18h04
  4. [VB.NET]Lancement d'un programme que s'il n'est pas lancé
    Par cyrcroix dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/06/2005, 15h05

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