2009-05-19 49 views
0

我遇到了一些问题。在Windows上显示隐藏进程?

与我之前关于Slipstreamed SP3 vs. patched SP3的问题相关,我们得出结论,有一个Internet Explorer进程正在启动,指示从本地磁盘加载一个简单的.html文件,其中包含javascript,它打开其余的更大的聊天/会议系统。 Internet Explorer从Lotus Notes客户端启动。

不幸的是,我们只能看到在任务管理器中弹出的IExplore.exe进程,几秒钟后又消失了。

如果我们尝试打开我们在磁盘上找到的本地.html文件,它会向我们提供顶部的信息栏,告诉我们它禁用了活动内容。然而,这并不是真正的问题。我们有另一台机器具有相同的设置,但一切正常,手动加载.html文件也给我们提供了相同的错误。

但是,当IExplore从笔记开始时,可​​能会显示另一个错误消息,但由于此过程只是启动系统的其余部分,并且此窗口已隐藏,所以我们无法看到它,是,错误消息/问题。因此,我想,也许我应该尝试创建一个等待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进程,并指示它显示自己,当它没有窗口句柄时?我怀疑它,但也许有人能证明我错了。

如果不是,我的备份计划是创建一个IExplore.exe程序,它将所有命令行参数转发到原始的参数,除了它指定要显示该窗口。这是一个解决方案吗?

回答

1

我不相信有什么办法可以强制一个没有窗口句柄的IE窗口为自己分配一个窗口句柄(或者使用以前分配的窗口句柄)并显示它自己。

至于你的备份方法:我认为这会工作,但你在危险的领土上工作。我实际上建议编写你的shim来记录每次调用iexplore.exe及其中的所有内容,并用它来表征你的问题;只有在彻底表征完全良性日志的问题后,才会建议修改参数以强制iexplore.exe显示一个窗口。

+0

这完全是一个调试工具,没有办法像这样糟糕的解决方案将投入生产,所以现在我们只是要去垫片选项,看看是否有帮助。 – 2009-05-19 18:29:34