Login to participate
Endpoint Management & Virtualization ArticlesRSS

Virtualizing Internet Explorer

Jordan's picture
One of the most requested applications for virtualization we get is Microsoft’s Internet Explorer (IE). People either want to have more the one version installed on the same machine so they can keep support for old Java Apps or the want the ability to Reset IE after use so a machine can be kept clean.
 
With Symantec Workspace Virtualization 6.1 there are two methods for virtualizing IE; one is a rather simple process that doesn’t have IE in a layer but instead running from the layer, so all changes it makes get caught into the layer, even though IE is installed in the base. The second method allows you to capture IE into a layer and is exportable to other machines but this method requires much more work then the first and only works with newer versions if IE.
 
Method One: Internet Explorer in the Base
 
In SVS 2.1 there was a feature available to the Command line and API, named Execute from Layer or Exec, that allowed you to take a process running from the base and have it run, instead, from inside a layer. This allowed any changes made by the process to be captured inside of the layer instead of going to the base—effectively virtualizing it.
 
With SWV 6.1 we exposed that feature under SWVadmin, called “Run Application From Layer”, so people would be more aware of it. We also added a new feature, named “Autorun From Layer” to SWV that took the concept one step farther so that anytime a process is launched, if it was associated with a layer, that the layer would Activate and then the process would Exec from the layer.
 
Flagging a process to Autorun from a layer is the only supported method for virtualizing IE6 and will work with any version of Internet Explorer or any application installed on the base.
 
While this process is very simple, only a few steps, and gains you many of the benefits of SWV (changes getting captured into the layer, resetting the layer, Isolation and Dependent layers) you don’t have portability (you cannot export any meaningful information) nor the ability to deactivate and “turn off” the application.
 
Steps to set up IE6 as an autorun process 
  1. Create an empty layer (Ctrl+N) and name it IE6
  2. Double click on the layer to open up the Advanced Layer Editor
  3. Navigate to the Autorun Applications tab
  4. Right-click and select “New Autorun Entry”
  5. Enter in C:\Program Files\Internet Explorer\iexplore.exe 
Now launch IE6 and change the homepage. You’ll see that the layer is activated and if you reset the layer the homepage reverts back to the default.

Method Two: Capturing IE 

Getting Internet Explorer into a layer, while not a hard process, does take quite a few steps that if not done can cause things to not work as intended -  such as IE8 features missing or text input boxes not working on IE6.
 
There are 3 main steps for getting IE8 or IE7 into a layer which are, in summery, capturing, extracting files from the install into the layer and setting up isolation for the layer.
 
If you’ve tried to capture IE7 before you may have read several of the articles up on Connect that discussed how to do this, which was to extract files from the installer into a layer and the to create a bunch of registry keys. This method worked OK but there were some issues with not being able to run multiple versions at the same time, as well as no guarantee that all the proper classes got registered and that everything thing was there that needed to be.
 
Note that this method of capture only works on XP or Windows Server 2003 but can be exported to Vista or Server 2008 (but not Windows 7). It’s also recommended that if you’re capturing IE8 to have IE6 on the machine and not IE7 because that’s the capture scenario that’s been tested the most—but it’s not required.
 
While these steps are specifically for IE8 you can use the same method for capturing IE7, their installs are almost identical.
 
Steps to Capture IE8
  1. Download the standalone IE8 installer from Microsoft (IE8-WindowsXP-x86-ENU.exe)
  2. Using SWV capture the install
  3. Once the install is done create a new folder on the desktop named IE8Standalone
  4. Copy the installer to that folder
  5. Open up a command window and navigate to the folder you created in step 3
  6. Type the name of the installer followed by /Extract
  7. It will ask you where to extract to, just click OK which will place it into the folder you’re in.
  8. Once that’s done type the following: REN SHLWAPI.DLL > SHLWAPI.DLL.BAK
  9. Now type the following: TYPE NUL > Iexplore.exe.Local
  10. Close the command window and delete the installer package from the folder
  11. Open up SWVadmin
  12. Make sure the layer with IE8 in it is deactivated and then open up the advanced layer editor.
  13. Drag the IE8standalone folder to [ProgramFiles] under the Read-Only Sub-Layer
  14. copy all the DLLs from IE8Standalone and place them into the Read-Only Sub-layers [WINDIR]\System32 and [WINDIR]\System32\DllCache
  15. Close the Advanced Layer Editor 
So what we’re doing here is a normal single program capture to get all the registry information. Then to get the files we need we extract then and place them in the layer. The command line steps that rename a file and then create a file are to place IE in USB mode so that you can run it from a non-standard install (I believe this is legacy that’s still supported on XP even though IE8 will not run correctly just by doing this).
 
Now you may be asking why don’t I just copy files to where they weren’t getting placed down during a normal install instead of creating a new folder? Well there’s a couple answers for that: First is that you have to have IE somewhere else if you want to run multiple versions of themselves. Explorer will see the version in the layer that activated last so if you had IE7 and IE8 in layers and activated IE8 first Explorer would see IE7 instead. If you have something in that same location, IE6, and then have layers with information Explorer would see what’s on the base before anything else.
 
Secondly I did try to copy over IE8 files to where I thought they needed to go but I couldn’t get IE8 to launch. There’s something strange going with the installer strange enough that I actually see IE6 files in the layer under C:\Windows\IE8 when the installer is captured-- which isn’t supposed to happen.

Update: See the newly added step 14 for where everything goes if you don't want to make and IE8Standalone folder.

 
So if the files under C:\Windows\IE8 and C:\Program Files\Internet Explorer aren’t needed why not delete them? Well when you some IE8 features stop working and there’s instability so not all the files need to be placed in IE8Standalone because they’re being registered somewhere else but, honestly, it’s not worth the time to scan the registry to be able to delete duplicate files out of a 50meg VSA.
 
With these two methods of virtualizing Internet Explorer you should be able to meet the needs of any environment that you manage—even if it’s you want to virtualize IE at home.
 
autoowned's picture

SHWLAPI.DLL File

I'm unable to find the SHWLAPI.DLL file in the new directory.  Is there any chance that it is actually SHLWAPI.DLL?

Also, what should be done about the required reboot that IE wants to do at the end of the installation into the layer?

Jordan's picture

You're right it's

You're right it's SHLWAPI.DLL.

Just deactivate the layer and upon the first activation the run-once and pending rename will resolve.  If you want to remove them after the re-activate (and merge the changes they made to the RO) you can because if you ever reset the layer they'll run again-- but it's not necessary,

If a forum post solves your problem please flag is as the solution

I you like an article, blog post or download vote it up

yamine's picture

Rundll Error

First thank's for your article.

I 've follow the method two to create the layer (with ie6 on the base on a xp sp3). It works well but each time i restart my machine there is a error message during the opening session :
rundll error : error in c:\windows\system32\iedkcs32.dll , missing entry : BrandIEActiveSetup

For information i use a vbs script (in a run key) wich activate my layers.
Did i made a mistake?

Jordan's picture

Are you doing Step #2? 

Are you doing Step #2?  Packaging IE is a little strange because you need to capture the app as normal, via single program capture, then extract the contents of the installer and place then in the layer.

Also are you trying to run more the one version of IE at the same time?  Because you can hit that error if you have IE6 and IE7 or IE8 Running.

If a forum post solves your problem please flag is as the solution

I you like an article, blog post or download vote it up

Jordan's picture

Ok so I can hit the issue

Ok so I can hit the issue when I have the layer set to Activate on System Startup.

Lets see if a little bit of isolation will clear up this problem.

1)      In SWVadmin change the view to details
2)      Get the Magic Number for both IE7 and IE8’s Read-only Sub-layers.
3)      Open up regedit and navigate to the layer’s properties area (currently HKEY_LOCAL_MACHINE\SYSTEM\Altiris\FSL\#)
4)      In each of the RO areas create a Multi-String Value named IsolationRules
5)      Open up Notepad and type the following: *\iexplore.exe    Base   0x0002 \REGISTRY\*     *           GUID1
a.       GUID1 is the layer you want to be hidden from the base, so our IE layer in this instance
b.       Note that each of those group of spaces have to be TAB characters which is why you need to enter the information into Notepad first, you cannot tab in the registry dialog box. Spaces will not work so make sure they’re all tabs.
6)      Copy the line you just type for your layer and enter it in as the data for the value you created in step 4.

Let me know if this solves the problem.

If a forum post solves your problem please flag is as the solution

I you like an article, blog post or download vote it up

yamine's picture

I test it

I  followed the issue and i've  created the IsolationRules key for my ie8's layer. :  *\iexplore.exe[tab]Base[tab]0x0002[tab]\REGISTRY\*[tab]*[tab]guid_ie8
And the results are :

  1. The error message still appear
  2. if the layer is not activate the research fonction (start/search) don't work

Are you doing Step #2?  Packaging IE is a little strange because you need to capture the app as normal, via single program capture, then extract the contents of the installer and place then in the layer.
=> Yes i do the step two...step by step

Also are you trying to run more the one version of IE at the same time?  Because you can hit that error if you have IE6 and IE7 or IE8 Running
=> no i don't

LeeT's picture

exporting/importing

HI Jordan,
First of all, great info. I followed your steps and it worked great. I did experience the issue with the BrandIEActiveSetup error and used the isoltationreuls key and that corrected it.
So on my test system I can run IE8 or IE6 (in the base) with no issues.

I exported out the IE8 package and imported it on another pc. Ie8 works fine, but when activated IE6 throws an error. I deactivate IE8 and IE6 works.
It sounds like something with the isolation. Not sure (still new to SVS).
BTW I did this using svs 2.2.

thoughts?

Jordan's picture

Isolation doesn't exist in

Isolation doesn't exist in the SVS 2.x product so you have to use 6.1 for that to work.

Running IE6 and another version of IE is a completely different beast and I have a different article that I have to finish that explains how to get that to work but, in brief, it requires you to flag the layer as hidden from the base which means that Explorer cannot see the virtualized IE--which makes it hard to use.

There are ways to get it to work, which are outside the scope of the comments thread.

If a forum post solves your problem please flag is as the solution

I you like an article, blog post or download vote it up

LeeT's picture

Thanks

Thanks Jordan. Good to know about version issue.

What I have found is if this error for the BradnIEActivateSetup only happens the first time or if a new profile is created.
Click ok to get pass it and it doesn't come back up. Both IE8 and IE6 seems to work just fine.

but thanks for the info.
I look forward to your updated posts.

Jordan's picture

I've been getting some

I've been getting some messages about running multiple versions of IE at the same time, I've delayed the article because I've updated the method to capture IE7 and IE8 so things like Printing work, however this changes how the IE6 in the base with IE7/IE8 in a layer behaves.  Once we've done some more validation that this new method is a more accurate install I'll update this article with that information and how to run more then one version at a time.

If a forum post solves your problem please flag is as the solution

I you like an article, blog post or download vote it up

Jordan's picture

I've updated the article with

I've updated the article with a new step that should fix any issues you're having with virtualized IE7 or IE8, like printing, however if you do it you'll need to hide the IE layer from other layers if you've got more then one version virtualized.

I'll have a new article up soon with more on IE6 and running multiple versions.

If a forum post solves your problem please flag is as the solution

I you like an article, blog post or download vote it up