views:

1050

answers:

3

Hi,

i have a strange problem with IE8 installed in xp. i was trying to launch IE using an System.Diagnostics.Process.Start method in c#. And i have a requirement to trap the exited event of the IE and do some operation. But i ended up in a rather strange problem where the IE immediately fires the exited event after launch.

this is the sample code

     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");
    }

But the above code perfectly works when laucnching different process (ex:notepad) and it fires the exit event when i close the exe.

this only gives problem launching IE 8. Can someone clarify me what is the problem??

UPDATE

Most friends replied my post and saying why you can't just use an URL? why stick with IE?

here the reason

the ultimate aim of the app is to launch an URL from the windows application and will hide an exe when working on the IE. And show the exe after closing the IE.

Thanks

RameshVel

A: 

Maybe IEXPLORE itself launches a different process for the URL and ends the process you created? Like a fork on Unix?

Thorsten Dittmar
Something of this also came to my mind...that iexplore.exe is actually kicking of something else or creating another process for the main program.
Bobby
+6  A: 

Most probably is that you have IE already running as a process, so when you try to launch it again as a new process it looks that there are IE running already, tells it that user initiated a new window (so the initial IE will create a "new" window rather than a new one) and exit.

Possible solution: try starting the process with "-nomerge" command line option:

    Process objProcess = Process.Start("IEXPLORE.EXE", "-nomerge http://google.com/");

Interesting observation: objProcess.ExitCode (for IE8 at least) will be equal to 0 if exited passing control to another instance, and 1 if it was actually closed by user.

Regent
many thanks for the reply Regent. your approach allows me to handle the IE exit on closing. But now the URL is totally messed and displaying something like this "http:///new%20http://google.com/"and not loading the expected document...
Ramesh Vel
Try "-new http://google.com/" please.
Regent
launching the URL. But not working as expected :(.. this leads to the default behaviour. (firing exited after launch)
Ramesh Vel
Just found another flag - try "/nomerge http://google.com/"
Regent
Regent, you rock friend.. :( it works now.... many thanks..
Ramesh Vel
+1  A: 

If another instance of iexplore.exe is already running on the machine, new instances will connect to that and immediately exit. Also, it's possible that even in the case where iexplore is not running, the multiprocess architecture of Internet Explorer 8 has the parent launch child broker process and exit immediately.

But these answers are besides the point. You should not be launching Internet Explorer directly. If the user has configured another default browser, they will be unhappy that you are ignoring their preferences. Instead, why don't you try

System.Diagnostics.Process.Start("http://google.com");

directly and that will do the right thing. You won't be able to tell when the browser closed, but if the command has opened a new tab in an existing browser session for example, the browser close event will be meaningless to your application.

Eugene Talagrand