我有点问题。
与我之前关于Slipstreamed SP3 vs. patched SP3的问题相关,我们得出的结论是,有一个 Internet Explorer 进程正在启动,指示从本地磁盘加载一个简单的 .html 文件,其中包含打开的 javascript更大的聊天/会议系统的其余部分。Internet Explorer 从 Lotus Notes 客户端启动。
不幸的是,我们只能看到 IExplore.exe 进程在任务管理器中弹出,几秒钟后又消失了。
如果我们尝试打开在磁盘上找到的本地 .html 文件,它会在顶部显示信息栏,告诉我们它已禁用活动内容。然而,这并不是真正的问题。我们有另一台具有相同设置但一切正常的机器,手动加载 .html 文件也会给我们同样的错误。
但是,从notes启动IExplore时,可能还有另一个错误信息,但是由于这个过程应该只是kickstart系统的其余部分,而这个窗口是隐藏的,我们看不到它,即错误消息/问题。
所以,我想,也许我应该尝试创建一个小程序,等待 IExplore.exe 启动,然后立即显示窗口,以便我们可以看到错误消息,或者任何问题。至少,希望我们能够看到这一点。
到目前为止一切都很好,除了如果我从我自己的程序启动一个带有隐藏窗口的进程,主窗口句柄为 0,因此我根本无法显示该窗口。我希望这个从 Lotus Notes 启动的 IExplore.exe 进程也有同样的问题。
我的监控程序是用 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 进程并指示它显示自己?我对此表示怀疑,但也许有人可以证明我错了。
如果没有,我的备份计划是创建一个 shim IExplore.exe 程序,它将所有命令行参数转发给原始的,除了它指定要显示的窗口。这会是一个解决方案吗?