Показывает скрытый процесс в Windows?

У меня небольшая проблема.

В связи с моими предыдущими вопросами о Slipstreamed SP3 и исправленном SP3, мы пришли к выводу, что запущен процесс Internet Explorer, получивший указание загрузить с локального диска простой файл .html, содержащий javascript, который открывает остальную часть более крупного чата/встречи. система. Internet Explorer запускается из клиента Lotus Notes.

К сожалению, все, что мы видим, это то, что процесс IExplore.exe появляется в диспетчере задач, а через несколько секунд снова исчезает.

Если мы попытаемся открыть локальный файл .html, который мы нашли на диске, он выдаст нам эту информационную панель вверху, говорящую нам, что он отключил активное содержимое. Однако это не настоящая проблема. У нас есть другая машина с такими же настройками, но на которой все работает, и загрузка файла .html вручную дает нам ту же ошибку.

Однако, возможно, при запуске IExplore из заметок отображается другое сообщение об ошибке, но поскольку этот процесс должен просто запускать остальную часть системы, а это окно скрыто, мы не можем его увидеть, то есть ошибка сообщение/проблема.

Итак, я подумал, что, возможно, мне следует попробовать создать небольшую программу, которая ожидает запуска IExplore.exe, а затем сразу же показывает окно, чтобы мы могли видеть сообщение об ошибке или что-то в этом роде. По крайней мере, надеюсь, мы сможем это увидеть.

Пока все хорошо, за исключением того, что если я запускаю процесс из своей собственной программы со скрытым окном, дескриптор главного окна равен 0, и поэтому я не могу показать окно в конце концов. Я ожидаю, что этот процесс IExplore.exe, запущенный из Lotus Notes, будет иметь ту же проблему.

Моя программа мониторинга написана на C# и в основном выполняет этот цикл:

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

Это поднимает все процессы IExplore.exe, окна или нет, и с IE8 я получаю 2 процесса для первого окна, как и ожидалось. Я запускаю это снова и снова и обрабатываю отличия от предыдущих запусков.

Однако процесс ненадолго имеет дескриптор окна 0 в начале, поэтому я изменил его на это:

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

но теперь он вообще ничего не получает, даже после того, как окно получило дескриптор (и да, у process.MainWindowHandle действительно есть ненулевое значение дескриптора после того, как окно было показано, но в случае, когда окно никогда не отображается, он остается равным 0.)

Итак, вопрос: есть ли способ взять этот скрытый процесс IExplore.exe и дать ему указание показать себя, когда у него еще нет дескриптора окна? Я сомневаюсь в этом, но, возможно, кто-то может доказать, что я ошибаюсь.

Если нет, мой план резервного копирования состоит в том, чтобы создать программу-оболочку IExplore.exe, которая перенаправляет все аргументы командной строки исходной, за исключением того, что она указывает, что окно должно быть показано. Будет ли это решением?


person Lasse V. Karlsen    schedule 19.05.2009    source источник


Ответы (1)


Я не верю, что есть какой-либо способ заставить окно IE, у которого нет дескриптора окна, выделять дескриптор окна для себя (или использовать ранее выделенный) и отображать себя.

Что касается вашего метода резервного копирования: я думаю, что это сработает, но вы работаете на опасной территории. На самом деле я бы рекомендовал написать вашу оболочку, чтобы просто регистрировать каждый вызов iexplore.exe и все, что с ним связано, и использовать это для характеристики вашей проблемы; только после тщательного описания вашей проблемы с абсолютно безопасным ведением журнала я могу предложить изменить параметры, чтобы заставить iexplore.exe отображать окно.

person Paul Sonier    schedule 19.05.2009
comment
Это полностью инструмент отладки, такое паршивое решение не может быть запущено в производство, поэтому прямо сейчас мы просто собираемся использовать опцию shim, чтобы посмотреть, поможет ли это. - person Lasse V. Karlsen; 19.05.2009