Вопрос

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

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

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

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

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

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

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

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

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

Это поднимает все IExplore.exe процессы, Windows или нет, и с 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 программа, которая пересылает все аргументы командной строки к исходным, за исключением того, что она указывает, что окно должно быть показано.Было бы это решением?

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top