2009-05-19 8 views
0

J'ai eu un peu de problème. En relation avec mes questions antérieures sur Slipstreamed SP3 vs. patched SP3, nous sommes arrivés à la conclusion qu'il y a un processus Internet Explorer démarré, chargé de charger un fichier .html simple à partir du disque local, qui contient javascript, ce qui ouvre le reste d'un plus grand système de discussion/chat. Internet Explorer est démarré à partir d'un client Lotus Notes.Affichage d'un processus caché sous Windows?

Malheureusement, tout ce que nous pouvons voir est le processus IExplore.exe apparaissant dans le Gestionnaire des tâches, et quelques secondes plus tard, disparaissent à nouveau.

Si nous essayons d'ouvrir le fichier .html local, que nous avons trouvé sur le disque, il nous donne cette barre d'information en haut, nous indiquant qu'il a désactivé le contenu actif. Ceci, cependant, n'est pas le vrai problème. Nous avons une autre machine qui a les mêmes paramètres mais où tout fonctionne, et charger le fichier .html manuellement nous donne la même erreur là aussi. Cependant, un autre message d'erreur s'affiche peut-être lorsque IExplore est démarré à partir de notes, mais comme ce processus est supposé démarrer le reste du système et que cette fenêtre est masquée, nous ne pouvons pas le voir. est, le message d'erreur/problème. Donc, je pensais, peut-être que je devrais essayer de créer un petit programme qui attend que IExplore.exe démarre, puis affiche immédiatement la fenêtre, afin que nous puissions voir le message d'erreur, ou quel que soit le problème. Au moins, j'espère que nous pourrons voir cela. Jusqu'ici tout va bien, sauf que si je lance un processus à partir de mon propre programme, avec une fenêtre cachée, le handle de la fenêtre principale est 0, et donc je ne peux pas montrer la fenêtre après tout. Je m'attends à ce processus IExplore.exe démarré à partir de Lotus Notes pour avoir le même problème.

Mon programme de surveillance est écrit en C#, et fonctionne essentiellement cette boucle:

foreach (var process in Process.GetProcesses()) 
{ 
    if (process.ProcessName.ToLower() == "iexplore") 
     result.Add(process); 
} 

Ce ramasse tous les processus iexplore.exe, fenêtres ou non, et avec IE8, je reçois 2 processus pour la première fenêtre, comme prévu. Je cours ceci encore et encore, et gère les différences des courses précédentes.

Cependant, le processus a brièvement une poignée de fenêtre 0 au début, donc je l'ai changé à ceci:

foreach (var process in Process.GetProcesses()) 
{ 
    if (process.ProcessName.ToLower() == "iexplore" && 
     process.MainWindowHandle != IntPtr.Zero) 
    { 
     result.Add(process); 
    } 
} 

mais maintenant il ne capte pas quoi que ce soit, même après que la fenêtre a obtenu un handle (et oui, process.MainWindowHandle a une valeur de handle non nulle après que la fenêtre a été montrée, mais dans le cas où la fenêtre n'est jamais montrée, elle reste à 0.)

Ainsi, la question est : Y at-il un moyen pour moi de prendre ce processus IExplore.exe caché, et lui demander de se montrer, quand il n'a pas déjà un handle de fenêtre? J'en doute, mais peut-être que quelqu'un peut me prouver le contraire. Si ce n'est pas le cas, mon plan de sauvegarde consiste à créer un programme shim IExplore.exe, qui transmet tous les arguments de la ligne de commande à l'original, sauf qu'il spécifie que la fenêtre doit être affichée. Serait-ce une solution?

Répondre

1

Je ne crois pas qu'il existe un moyen de forcer une fenêtre IE qui n'a pas de handle de fenêtre à allouer un handle de fenêtre pour lui-même (ou utiliser un handle précédemment alloué) et afficher lui-même.En ce qui concerne votre méthode de sauvegarde: I pense cela fonctionnerait, mais vous travaillez dans un territoire dangereux. Je recommande en fait d'écrire votre shim pour simplement enregistrer chaque invocation de iexplore.exe et tout ce qui s'y trouve, et l'utiliser pour caractériser votre problème; Ce n'est qu'après avoir bien caractérisé votre problème avec une journalisation complètement bénigne que je suggérerais éventuellement de modifier les paramètres pour forcer iexplore.exe à afficher une fenêtre.

+0

Ceci est entièrement un outil de débogage, il n'y a aucun moyen qu'une solution moche comme ça entrerait en production, donc maintenant nous allons juste aller avec l'option shim pour voir si cela aide. –

Questions connexes