【问题标题】:Whose Bug Is This - IE or Windows/.NET?这是谁的错误 - IE 或 Windows/.NET?
【发布时间】:2010-08-09 14:53:05
【问题描述】:

当我运行它然后进入任务管理器并手动结束其中一个 iexplore 实例(大概有 2 个,因为 IE 现在也使用多个进程)我看到一个错误弹出框,显示一个选项卡已恢复.但是,由于我的进程设置,iexplore 本身是不可见的。因此,我认为不应出现弹出气球恢复消息。这是 IE 在显示此消息之前没有检查它是否可见的错误,还是 Windows/.NET 没有阻止 IE 显示任何“窗口”(在这种情况下为气球)的错误?

Process process = new Process
{
  StartInfo =
  {
     CreateNoWindow = false,
     FileName = "iexplore.exe",
     UseShellExecute = true,
     ErrorDialog = false,
     WindowStyle = ProcessWindowStyle.Hidden
  }
};

process.Start();

如果这是一个错误,我应该在哪里报告?连接?

【问题讨论】:

  • 我认为是这样设计的。 IE 注意到同级进程停止并假定它崩溃并运行恢复。
  • 对不起,我认为你没有抓住重点。我知道泡沫是关于什么的。我不知道为什么当我给 IE 提供要隐藏的参数并且 IE 本身被隐藏时它会出现......只是不是这个小气球弹出窗口。

标签: .net windows internet-explorer process


【解决方案1】:

我很惊讶这完全有效,非控制台模式应用程序通常会忽略请求的 WindowStyle。以 notepad.exe 为例。

但是是的,这将是 IE 中的一个缺陷。 Process 类除了将请求的窗口样式传递给启动的进程之外没有其他权力。进程通过 WinMain() 的 nShowCmd() 参数获取此请求。

在 Connect 上有一个 IE 反馈渠道。但他们只接受 IE9 的报告,你必须申请。我猜想是试图避开 IE6 讨厌的邮件。

【讨论】:

  • 嗯,所以你是说忽略这些设置是应用程序的选择?通过 WindowStyle 设置,我可以理解更多。然而,CreateNoWindow 选项听起来更像是 Windows 控制的东西(又名 - 应用程序不知道它被隐藏了)。我将看看在 Connect 上注册...我假设这个错误也存在于 IE9 中。顺便说一句,notepad.exe 确实被隐藏了。
  • 是的,这是 IE 的错,而不是运行时的错。但是,就错误而言,我怀疑这是相当低的优先级......它并不是真正受支持的场景,并且有一种方法可以正确地做你想做的事情(见我的回答)。
【解决方案2】:

如果您想以正确的方式执行此操作,您应该使用IID_IWebBrowser2 将互操作写入CoCreateInstance() CLSID_InternetExplorer。您可以获得IWebBrowser2 at pinvoke.net 的互操作。

这将创建一个不可见的 IE 实例,然后您可以使用IWebBrowser2::put_Visible(VARIANT_TRUE) 使其稍后可见。

【讨论】:

  • 这让我害怕你知道这么多 :-) 感谢您提供的信息,它看起来正是我需要的,虽然它需要更多的工作。
猜你喜欢
  • 1970-01-01
  • 2015-05-06
  • 2017-06-11
  • 2019-08-09
  • 2013-10-17
  • 1970-01-01
  • 2021-07-20
  • 2010-10-19
  • 1970-01-01
相关资源
最近更新 更多