12
votes

Process.Start ("iexplore.exe") incendie immédiatement l'événement exitéré après le lancement .. pourquoi?

J'ai un problème étrange avec IE8 installé dans XP. J'essayais de lancer IE à l'aide d'une méthode System.Diagnostics.Process.start en C #. Et j'ai besoin de piéger l'événement exitéré de l'IE et de faire une certaine opération. Mais je me suis retrouvé dans un problème assez étrange où l'IE tire immédiatement l'événement exitéré après le lancement.

Ceci est le code exemple xxx

mais le code ci-dessus fonctionne parfaitement lorsque Laucnching Différent Process (Ex: Notepad) et tire l'événement de sortie lorsque je ferme l'EXE.

Ceci ne donne que problème de problème, c'est-à-dire que quelqu'un peut me clarifier quel est le problème ?? < p> mise à jour

la plupart des amis ont répondu mon message et disant pourquoi vous ne pouvez pas simplement utiliser une URL? pourquoi rester avec IE?

ici la raison

Le but ultime de l'application est de lancer une URL à partir de l'application Windows et de masquer un exe Travailler sur l'IE. Et montrer l'exe après la fermeture de l'IE.

merci


9 commentaires

Sur mon système (XP SP 3, .NET Framework 3.5, soit 8) Ce code fonctionne sans aucun problème. Peut-être que vous avez un problème d'autorisation?


avez-vous essayé avec une autre fenêtre IE déjà ouverte ??


Notez que les utilisateurs ayant un navigateur par défaut différent n'apprécieront pas que vous ouvrez IE. Vous pouvez essayer de passer l'URL à processus.start , mais assurez-vous que userShelexecute est défini. Bien sûr, cela complique de vérifier si le navigateur est sorti ...


@THOMAS, le but de l'application est de gérer la sortie IE. et c'est aller une application IE SEULE et fonctionner dans un intranet fermé. Je vais ajouter des informations à ma question, espérons que clarifie


Pourquoi créez-vous, c'est-à-dire hors du processus en premier lieu? Pourquoi ne pas simplement créer un objet de navigateur en cours? Ensuite, il n'est pas nécessaire de s'inquiéter de cela en sortant.


@Eric, pouvez-vous expliquer plus un peu plus sur ce que vous dites ..? Je ne peux pas te chercher ..


Certains objets sont toujours dans leur propre processus. Vous voulez parler à Excel, vous devez démarrer le processus Excel.exe. Certains objets sont toujours dans votre processus. Vous souhaitez mettre un bouton dans votre application, vous n'appelez pas le processus croisé sur Button.exe; Le code pour le bouton fonctionne dans votre processus. Le navigateur Web peut être exécuté de toute façon. Y a-t-il une raison pour laquelle vous souhaitez l'exécuter hors du processus au lieu de procéder?


Si je comprenais correctement, vous voulez dire pourquoi ne peut pas utiliser l'objet WebBrowser à l'intérieur Winform. Oui, nous pouvons le faire. Mais le problème est que le client souhaitait lancer le point de vue du processus Exe en cours d'exécution pour avoir réel navigateur exp. sa page complexe.


Pour plus de clarification, c'est un plugin ActiveX, c'est-à-dire (le formulaire Win) et cela serait déclenché à partir de mon site Web dans la machine cliente. Et après le traitement du client sous la forme, il a déclenché l'URL spécifiée par le client du système hérité qu'ils utilisent. J'espère que cela clarifie ..


3 Réponses :


1
votes

Peut-être que IExplore lui-même lance un processus différent de l'URL et met fin au processus que vous avez créé? Comme un Fourchette sur UNIX?


1 commentaires

Quelque chose de cela est également venu à mon esprit ... que IExplore.exe est en train de donner un coup de pied à quelque chose d'autre ou de créer un autre processus pour le programme principal.



21
votes

La plupart probablement est que vous avez déjà exécuté comme un processus, alors lorsque vous essayez de le lancer à nouveau comme un nouveau processus, il semble que c'est-à-dire qu'il existe déjà, indique que l'utilisateur a initié une nouvelle fenêtre (donc l'initiale IE créera une "nouvelle" fenêtre plutôt qu'un nouveau) et une sortie.

solution possible: Essayez de démarrer le processus avec l'option de commande de commande "-NOMERGE": xxx

Observation intéressante : objprocess.exitcode (pour IE8 au moins) sera égal à 0 si vous avez quitté le contrôle de passage à une autre instance, et 1 s'il était effectivement fermé par l'utilisateur.


3 commentaires

Merci beaucoup pour la réponse régente. Votre approche me permet de gérer la sortie IE sur la fermeture. Mais maintenant, l'URL est totalement folle et affichant quelque chose comme ça "http: /// nouvelle% 20http: //google.com/" et ne pas charger le document attendu ...


lancement de l'URL. Mais ne fonctionne pas comme prévu :( .. Cela conduit au comportement par défaut. (Couleur excitée après le lancement)


Étonnante. Sérieusement. V. Handy. Maintenant ... Qu'est-ce qui supporte -Nomerge / nomerge et ce qui ne ....



3
votes

Si une autre instance d'Iexplore.exe est déjà en cours d'exécution sur la machine, de nouvelles instances se connecteront à cela et de sortir immédiatement. De plus, il est possible que même dans le cas où IExplore ne fonctionne pas, le Architecture multiprofessive d'Internet Explorer 8 a le processus de courtier enfant lancé parent et sortie immédiatement.

Mais ces réponses sont en plus du point. Vous ne devriez pas lancer directement l'explorateur Internet. Si l'utilisateur a configuré un autre navigateur par défaut, ils seront malheureux que vous ignorez leurs préférences. Au lieu de cela, pourquoi n'essayez-vous pas xxx

directement et cela fera la bonne chose. Vous ne pourrez pas savoir quand le navigateur fermé, mais si la commande a ouvert un nouvel onglet dans une session de navigateur existante, par exemple, l'événement de fermeture du navigateur n'a pas de sens à votre application.


0 commentaires