none
[Résolu] Process.Exited appellé avant la fermeture de Word2010 RRS feed

  • Question

  • Bonjour,

    Mon problème est le suivant, je lance Word depuis mon code de cette façon:

    Process process = new Process();
    process.StartInfo.FileName = s_filename;
    process.EnableRaisingEvents = false;
    process.Exited += new EventHandler(process_Closed);
    process.Start();

    Malheureusement lorsque l'on a déjà un Word de lancer le fait d'en lancer une deuxième instance appel directement l’événement Exited alors que l'on a fermé aucune de ces 2 instances!

    La méthode qui est appelé par l’événement Exited permet simplement de supprimer le fichier qui a été ouvert... Dans mon cas le fichier est supprimé avant même d'avoir été ouvert par Word !!!

    private void process_Closed(object sender, EventArgs args)
    {
         String fileName = ((Process) sender).StartInfo.FileName;
         File.Delete(fileName);
    }

    Ce problème se produit uniquement avec Word 2010 et fonctionne parfaitement avec Word 2007.

    Edit: y aurait-il une façon de détecter la fermeture de l'instance générale?

    Merci d'avance pour votre aide.




    • Modifié ludo6577 jeudi 21 juin 2012 14:33
    lundi 18 juin 2012 13:31

Réponses

  • Bonjour,

    pour ma part le comportement avec word 2007 est le même que celui que vous décrivez avec word 2010. En effet même si l'on exécute 2 fois le code démarrant le process winword au final il ne reste qu'un seul exe visible dans la liste des taches : ceci explique donc que l'event process_Closed soit immédiatement appelé pour le deuxième process.

    Pour conserver le deuxième process vous pouvez passer l'option -m lors du démarrage du processus et l'on obtient alors 2 events Closed.

    Process process = new Process();
    process.StartInfo.FileName = "winword.exe";
    process.StartInfo.Arguments = "-m";
    process.EnableRaisingEvents = true;
    process.Exited += new EventHandler(process_Closed);
    process.Start();
    Cordialement
    mercredi 20 juin 2012 15:59
    Modérateur

Toutes les réponses

  • Bonjour,

    pourquoi ne pas tester si le process word est déjà ouvert avec Process.GetProcesses par exemple.

    Cordialement
    mardi 19 juin 2012 08:48
    Modérateur
  • Merci de votre réponse,

    J'ai essayer avec cette méthode aussi mais le problème est que si l'utilisateur a ouvert Word sans passer par ma fonction et qu'il referme cette instance en dernier l’événement ne sera pas appelé

    mardi 19 juin 2012 09:07
  • Bon,

    Devant le peu de réponse j'ai totalement abandonné l'idée d'utiliser ce mode de fonctionnement et je supprime maintenant les fichiers à la fermeture de mon programme. (Ce qui est très moche)

    Un grand merci à Microsoft de faire des nouvelles versions d'une très grande qualité, surtout pour un logiciel aussi utilisé que Word...

    mercredi 20 juin 2012 13:03
  • Bonjour,

    pour ma part le comportement avec word 2007 est le même que celui que vous décrivez avec word 2010. En effet même si l'on exécute 2 fois le code démarrant le process winword au final il ne reste qu'un seul exe visible dans la liste des taches : ceci explique donc que l'event process_Closed soit immédiatement appelé pour le deuxième process.

    Pour conserver le deuxième process vous pouvez passer l'option -m lors du démarrage du processus et l'on obtient alors 2 events Closed.

    Process process = new Process();
    process.StartInfo.FileName = "winword.exe";
    process.StartInfo.Arguments = "-m";
    process.EnableRaisingEvents = true;
    process.Exited += new EventHandler(process_Closed);
    process.Start();
    Cordialement
    mercredi 20 juin 2012 15:59
    Modérateur
  • Merci énormément pour votre réponse,

    En effet Word 2007 exécute lui aussi 1 seul processus mais pourtant il appelle bien l’événement process_Closed lorsque l'on ferme une instance.

    Encore un grand merci pour votre réponse.

    jeudi 21 juin 2012 14:14
  • Merci de votre retour. Pour info pour clore le thread vous pouvez marquer le thread comme résolu en utilisant la fonction "Marquer comme réponse".

    Bonne continuation.

    jeudi 21 juin 2012 15:12
    Modérateur