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 :

Pb avec Process Start dans tâche planifiée. [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Par défaut Pb avec Process Start dans tâche planifiée.
    Bonjour,

    Un chose plutôt bizarre empêche le bon fonctionnement de mon application.
    Explication:
    L'appli a pour but de tuer des processus, arrêter des services, redémarrer ces services puis relancer les processus (avec Interface Graphique)... Un déroulement obligatoire qui n'a pas le droit à l'erreur.
    Mon appli se déroule correctement lorsque je la lance manuellement.
    Validant son fonctionnement je l'ai automatisé dans une tâche planifiée. Le problème est que lors de la dernière étape (lancement des processus) celle-ci est un échec. Alors que les autres étapes sont un succès (La tâches possède tous les droits pour l’exécution, et je suis sous server 2008).
    J'ai du mal à cerner la cause du problème, voici la méthode actuelle:
    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
            private static bool Open(string proc, string mess, string procName)
            {
                Process process = new Process();
                ProcessStartInfo startInfo = new ProcessStartInfo(proc);
                process.StartInfo = startInfo;
                process.Start();
                process.WaitForExit(10000);
     
                if (Process.GetProcessesByName(procName).Length > 0)
                {
                    envoiRapport += "* Processus " + mess + " lancé. \n";
                    return true;
                }
                else
                {
                    envoiRapport += "! Impossible de lancer le Processus \n";
                    return false;
                }
            }
    Si quelqu'un à déjà rencontrer le problème...
    Merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    C'est bizarre ton truc... à quoi correspondent "proc" et "procname" ? Tu lances proc, tu attends qu'il se termine, puis tu vérifies si procname s'exécute... je ne comprends pas trop la logique. Quel est le lien entre proc et procname ?

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2008
    Messages : 231
    Par défaut
    Eux je suis pas sur d'après ce que je comprend ici pour moi WaitForExit donne l'instruction de se terminer. Donc quand tu arrives dans ton if logiquement ton processus est terminé.
    D'ailleur il me semble que dans ta variable process tu peux encore agir et avoir des status.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par morgand Voir le message
    Eux je suis pas sur d'après ce que je comprend ici pour moi WaitForExit donne l'instruction de se terminer.
    Non, ça attend qu'il se termine, mais ça lui dit pas de s'arrêter...

    Citation Envoyé par morgand Voir le message
    Donc quand tu arrives dans ton if logiquement ton processus est terminé.
    Sauf que le process qu'il lance et celui qu'il vérifie ne sont pas les mêmes...

  5. #5
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Par défaut
    Tout d'abord Merci pour vos réponses.
    @ TomLev:
    La variable proc correspond au chemin absolut du .exe à lancer.
    La variable procName contient le nom .exe lancé (visible dans la liste des processus lancés)
    Pour ce qui concerne la vérification du lancement des processus, je ne l'ai pas encore tester, pour la simple et bonne chose que je ne peux lancé mon appli seulement hors activité c'est à dire la nuit
    Par contre pour WaitForExit(), tu me met le doute sur son rôle. Il permet bien de s'échapper de process ?

    @ Morgand:
    Alors je me suis surement mal exprimé ou bien je mis suis mal pris pour exécuter mes programmes. Il me semble que WaitForExit() termine le composant process, or comme celui-ci à lancé une application (en dehors du programme) je vérifie si cette appli a bien été lancée.

    Désolé si je me suis mal exprimé en confondant processus et .exe...

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2008
    Messages : 231
    Par défaut
    Tu as raison il attend N millisecondes pour voir si le process est arrêté ou non (true or false) ... N mille excuses

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par FrameBreak Voir le message
    La variable proc correspond au chemin absolut du .exe à lancer.
    La variable procName contient le nom .exe lancé (visible dans la liste des processus lancés)
    OK, donc en fait tu attends que le processus se termine, et ensuite tu regardes s'il est toujours là... ça sert à rien, utilise plutôt la valeur de retour de WaitForExit

    Citation Envoyé par FrameBreak Voir le message
    Par contre pour WaitForExit(), tu me met le doute sur son rôle. Il permet bien de s'échapper de process ?
    Comme déjà dit plus haut, ça ne termine pas le process, ça attend qu'il se termine. Tu as spécifié un timeout de 10 secondes, donc si le processus ne se termine dans les 10 secondes, ça renvoie true, sinon ça renvoie false

  8. #8
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Par défaut
    Merci pour la simplification.
    Mais je trouve ca risqué car dans certain cas (comme le lancement du gestionnaire de tâche) sans timeout pour WaitForExit() le processus ne finis jamais, et si un timeout est présent dans ce cas là la valeur renvoyée ne sera pas valable...
    Par contre le problème restera le même lorsque la tâche est automatisée.
    Alor mieux vaut essayer de relancer le .exe si WaitForExit() retourne true, ou procéder autrement?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. petit Problème avec (Process.Start)
    Par kazylax dans le forum C#
    Réponses: 2
    Dernier message: 01/10/2011, 15h21
  2. Réponses: 3
    Dernier message: 03/11/2008, 20h54
  3. [VB.NET 1.1] Ping silencieux avec Process.Start()
    Par toniolol dans le forum Windows Forms
    Réponses: 6
    Dernier message: 30/09/2008, 13h35
  4. Réponses: 4
    Dernier message: 02/04/2008, 15h19
  5. Probleme avec Process.Start
    Par lucyole dans le forum VB.NET
    Réponses: 4
    Dernier message: 03/01/2008, 18h42

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