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#

  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    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
    Points : 713
    Points
    713
    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 : 43
    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
    Points : 39 753
    Points
    39 753
    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 averti
    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
    Points : 359
    Points
    359
    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 : 43
    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
    Points : 39 753
    Points
    39 753
    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 éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    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
    Points : 713
    Points
    713
    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 averti
    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
    Points : 359
    Points
    359
    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 : 43
    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
    Points : 39 753
    Points
    39 753
    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 éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    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
    Points : 713
    Points
    713
    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?

  9. #9
    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 : 43
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par tomlev Voir le message
    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
    J'ai dit une connerie : c'est si le process se termine dans les 10 secondes, ça renvoie true (il y avait un "ne" en trop...)

    Citation Envoyé par FrameBreak Voir le message
    et si un timeout est présent dans ce cas là la valeur renvoyée ne sera pas valable...
    Bah si elle sera valable... si c'est false, c'est que le process tourne encore.

    Citation Envoyé par FrameBreak Voir le message
    Alor mieux vaut essayer de relancer le .exe si WaitForExit() retourne true, ou procéder autrement?
    Je comprends pas... tu veux relancer le programme s'il s'est terminé ?

  10. #10
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    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
    Points : 713
    Points
    713
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Je comprends pas... tu veux relancer le programme s'il s'est terminé ?
    Arf on a du mal à se comprendre, ou plutôt j'ai du mal à expliquer le but de ma requête.
    Mon process, de savoir s'il tourne ou non ce n'est pas le problème.
    Le problème est que quelque fois (comme en tâche planifié), le process a pour but de démarrer une appli (extérieur au programme) or il ne le démarre pas...
    Le chemin est bon, tout parait correct pourtant il ne le démarre pas. C'est pour cela que j'espionnai les processus qui tournais sur le PC afin de savoir si Windows considérait que l'appli extérieure était lancé.
    L'erreur de lancement est assez suspecte, car lorsque je double clik sur mon appli (C#) elle lance correctement l'appli exterieur. Mais si la tâche planifiée appelle l'appli (c#) il ne démarre pas l'appli extérieure...
    D'ou le but de vérifier dans les processus de Windows si l'appli ext est lancée, et si elle ne l'est pas je la relance une seconde fois...

    Complexe comme raisonnement

  11. #11
    Membre averti
    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
    Points : 359
    Points
    359
    Par défaut
    Si tu lances ton C# tout seul ça fonctionne ?

    Quand tu crées ta tâche planifiée ça ne fonctionne pas ?

    Si oui, non alors c'est pas ton code qui ne marche pas mais plutôt les paramètres qui merde ... je te conseil de créer des log pour tracer toutes les infos surtout les importantes et les status.

  12. #12
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    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
    Points : 713
    Points
    713
    Par défaut
    Je pense que tu as raison Morgand.
    Pourtant les paramètres sont corrects, d’ailleurs d'autre tâches ayant les même paramètres s'exécutent sans soucis. C'est pour cela que je pensais que le problème venait du code...
    Je trouve ca plutôt louche
    En tout cas merci pour votre aide, il me reste qu'a être sympa avec le serveur pour qu'il me rende des comptes

  13. #13
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    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
    Points : 713
    Points
    713
    Par défaut
    Bonjour,

    Je relance le thread afin de terminer correctement la discussion.
    Le problème de ne vient pas de la tâche planifié mais bien de l'étape suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                Process process = new Process();
                ProcessStartInfo startInfo = new ProcessStartInfo(proc);
                process.StartInfo = startInfo;
                process.Start();
    Or si je lance le .exe via cmd cela fonctionne correctement bizarrement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                Process process = new Process();
                process.StartInfo.FileName = "cmd.exe";
                process.StartInfo.Arguments = "/C start "+ proc;
                process.StartInfo.UseShellExecute = false;
                process.WaitForExit();
    La tâche lance correctement les .exe. Mais juste pour information, est-ce que quelqu'un pourrais me dire la cause de ce problème? La tâche se lance sous Windows 2008 Server 32bits...

  14. #14
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    D'après MSDN, Process.Start() renvoie true si le process a bien été lancé, ou false dans le cas contraire. Ca te renvoie quelle valeur ?

  15. #15
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    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
    Points : 713
    Points
    713
    Par défaut
    Hello,

    Process.Start() me renvoi false seulement lorsque je lance le .exe en tâche planifiée. Sinon il est bien à True dans le cas d'un démarrage de l'appli manuel...

  16. #16
    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 : 43
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par FrameBreak Voir le message
    Hello,

    Process.Start() me renvoi false seulement lorsque je lance le .exe en tâche planifiée. Sinon il est bien à True dans le cas d'un démarrage de l'appli manuel...
    Essaie de mettre le chemin complet de l'exécutable ; si tu mets juste le nom, il cherche par rapport au chemin courant, et quand tu exécute ens tant que tâche planifiée le chemin courant est C:\Windows\System32 (ou un truc dans ce style), donc il trouve pas le fichier

  17. #17
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    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
    Points : 713
    Points
    713
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Essaie de mettre le chemin complet de l'exécutable ; si tu mets juste le nom, il cherche par rapport au chemin courant, et quand tu exécute ens tant que tâche planifiée le chemin courant est C:\Windows\System32 (ou un truc dans ce style), donc il trouve pas le fichier
    Le Chemin absolut du .exe est bien référencé, ce qui ne devrait pas posé problème.
    Après je ne pense pas qu'il exécute "C:\Windows\System32C:\dossier\exec.exe", mais cela pourrai correspondre au non lancement du .exe. Si c'est la cas c'est un gros problème

  18. #18
    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 : 43
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par FrameBreak Voir le message
    Après je ne pense pas qu'il exécute "C:\Windows\System32C:\dossier\exec.exe"
    Non, si tu donnes un chemin absolu il le prend tel quel

  19. #19
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    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
    Points : 713
    Points
    713
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Non, si tu donnes un chemin absolu il le prend tel quel
    Oui je suis tout à fait d'accord avec toi.
    Sauf que je n'ai pas l'impression qu'il exécute le bon chemin. De plus en exécutant la commande via cmd.exe, le "start path/exec.exe" fonctionne.
    C'est à rien y comprendre...

+ 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