我在xp中安装IE8时遇到了一个奇怪的问题。我试图使用c#中的System.Diagnostics.Process.Start方法启动IE。我需要捕获IE的退出事件并执行一些操作。但我最终遇到了一个相当奇怪的问题,IE在发布后会立即触发退出的事件。
这是示例代码
Process objProcess = Process.Start("IEXPLORE.EXE", "http://google.com");
if (objProcess != null)
{
objProcess.EnableRaisingEvents = true;
objProcess.Exited += new EventHandler(myProcess_Exited);
}
public static void myProcess_Exited(object sender, System.EventArgs e)
{
MessageBox.Show("You exited");
}
但上面的代码完全适用于laucnching不同的进程(例如:notepad),当我关闭exe时它会触发exit事件。
这只会让问题启动IE 8.有人可以澄清我的问题是什么吗?
更新
大多数朋友回复了我的帖子并说明为什么你不能只使用网址?为何坚持使用IE浏览器?
这里的原因
该应用程序的最终目标是从Windows应用程序启动URL,并在IE上工作时隐藏exe。关闭IE后显示exe。
由于
答案 0 :(得分:21)
最有可能的是你已经将IE作为一个进程运行,所以当你尝试再次作为一个新进程启动它时,它看起来已经有IE运行,告诉它用户启动了一个新窗口(所以最初的IE将创建一个“新”窗口而不是新窗口并退出。
可能的解决方案: 尝试使用“-nomerge”命令行选项启动该过程:
Process objProcess = Process.Start("IEXPLORE.EXE", "-nomerge http://google.com/");
有趣的观察:objProcess.ExitCode
(至少对于IE8)如果退出将控制权传递给另一个实例将等于0
,如果是1
则为{{1}}实际上由用户关闭。
答案 1 :(得分:3)
如果机器上已经运行了另一个iexplore.exe实例,则新实例将连接到该实例并立即退出。此外,即使在iexplore未运行的情况下,Internet Explorer 8的multiprocess architecture也可能具有父启动子代理进程并立即退出。
但这些答案除了重点之外。您不应该直接启动Internet Explorer。如果用户配置了另一个默认浏览器,他们会因为忽略了他们的偏好而感到不快。相反,你为什么不试试
System.Diagnostics.Process.Start("http://google.com");
直接,这将做正确的事情。您将无法判断浏览器何时关闭,但如果该命令在现有浏览器会话中打开了新选项卡,则浏览器关闭事件对您的应用程序将毫无意义。
答案 2 :(得分:1)
也许IEXPLORE本身会为URL启动不同的流程并结束您创建的流程?就像Unix上的fork
一样?