Virtualizing IE6 and Running Multiple Versions of IE
Back in August I wrote an article explaining how to virtualize Internet Explorer 7 & 8 with Symantec Workspace Virtualization (SWV) 6.1. In that article I mentioned that only by running IE6 from a layer could you successfully virtualize IE6. Now long time Connect users know that the only official installer for IE6 is one for pre XP SP2 which isn't a scenario that people want to have to deal with to be able to virtualize IE6 (and SWV isn't supported on that old of and XP build,) So many have been using 3rd party installers, which work for the most part, but some things are missing and some DLLs aren't registered properly.
(Note: The following information on virtualizing IE6 is provided "as-is" and isn't officially supported.)
When I was asked to look into virtualizing IE6 I took the approach that it had to be simple as I could make it and not require any 3rd party installers. It had to be capturable via something Microsoft provided to users. Through some trial and error I was able to figure out a way to get IE6 inside a layer that's very similar to the method for capturing IE7 or IE8 with the key difference being you're not installing IE6 but instead uninstalling IE7 or IE8.
Before I get into the process I need to state that IE6 layers captured this way will only work on Windows 2000, Windows XP or Windows 2003 but they are transferable between machine to machine.
Capturing IE6
Environment: I did this all on XP SP3 with IE7 installed onto the base. The uninstaller for IE7 and IE8 will revert back to the previous version installed, so if you had IE7 installed and then installed IE8 the uninsaller would revert you back to IE7 not IE6 when you uninstall IE8.
Steps:
- Create and Empty Layer named IE6Standalone
- Create and Empty Layer on your desktop named IE6Standalone
- Navigate to %Windir%\IE7 and copy all the files inside that don't start with reg to your IE6Standalone folder
- Open up a command prompt and navigate to that folder
- Type "type NUL >iexplore.exe.local" without quotes
- Copy the IE6Standalone folder into your layer under program file
- Right-click on the layer and select update layer
- Browse to %Windir%\IE7\spuninst and run spuninst.exe
What we're doing, as mentioned previously, is very similar to capturing IE7 or IE8. What we're doing is creating a location (program files\IE6Standalone) that we can easily launch IE6 from. It's not necessary to do steps 2-6 but if you don't it will be much harder to make sure you're launching the correct version.
The last step, spuninst.exe, is the IE7 or IE8 uninstaller and when it runs it places all the IE6 DLLs back to where it expects them to go (%windir%\system32 and %windir%\system32\DLLchache), reregisters them and then adds back any missing registry keys. There are around 1000 registry files that the uninstaller reregisters which are what you don't copy over in step 3.
Running IE6 in a layer and another version in the base
The steps listed above will get you a working IE6 layer, however because we're uninstalling there are a lot of delete entries being created which will prevent IE7 or IE8 from running if they're installed in the base - which some people see as a bonus - but if you want IE versions in the base then you need to remove all the delete entries related to IE7 or IE8 from the layer.
Running multiple virtualized versions
To run multiple versions of IE if they're all virtualized requires you to hide the IE layers from each other using either "Hide From Other Layers" or "Hide Other Layers From This Layer" Isolation flags. In either case you'll be preventing these layers from working with other layers. If you have plugins or an application like Acrobat Reader that you want to run from inside IE you'll need to set up Layer Dependencies which will ignore Layer Isolation.
Known Issues:
The only thing I found that didn't work when IE6 is virtualized is that the About Box won't work and I haven't spent much time trying to figure out why. If you happen to find out how to resolve the issue post in the comments and I'll add the fix to this article.
Running IE6 in the base with a virtualized IE7 or IE8
Lastly is something I wasn't able to touch upon in my last article and that's running IE6, non-virtualized, from the base with a different version of IE inside a layer. This is kind of a pain to do because you have to use full layer isolation, Hide from base, which means that Explorer cannot see the virtualized IE, but there are a few workarounds.
Note that these methods are only needed when you're trying to run both versions of IE at the same time, just having a layer active with IE inside will not mess with IE6.
Method one: Run from Layer
The first way is to run a command prompt from the layer (never run explorer.exe from a layer) and navigate to your IE location and launch it. Steps below:
- Activate your IEStandalone layer (with isolation on)
- In SWVadmin right-click on the layer and select "Run From Layer"
- In the window that appears type %comspec%
- When the command line appears navigate to your IEStandalone location
- Type in iexplore.exe
Now your virtualized IE will launch and both IE6 and the other IE version will work at the same time.
Method Two: Dependent Layers
The second method is much more user friendly but takes a little more work to setup - that's to create a second layer with a shortcut to your virtualized IE version and then make the layers dependent on each other. In SWV Dependent Layers ignore any Isolation but that's not the reason we're making the dependency, since we're only hiding from the base other layers can still see the IE layer. Instead we're using the Dependent Layer functionality that makes sure that both layers are always active. Steps below:
- Create a new layer named IEStandaloneLauncher
- Activate your virtualized IE layer (make sure Isolation is off)
- Navigate to your IEStandalone folder
- Create a shortcut for Iexplore.exe
- Open up the Advanced Layer Editor for your IEStandaloneLauncher layer
- Copy the shortcut made in step 4 to where ever you want it to appear. Unless you want it to only appear for certain people, it's best to place it in the Read-only Sub-layer
- Now navigate to the Dependent layers tab
- Right-click in the white space and select "New Dependent layer"
- In the drop down box select your IEStandalone layer.
- Close the advanced layer editor for IEStandaloneLauncher
- Now open up the Advanced Layer Editor for your IEStandalone layer
- Now navigate to the Dependent layers tab
- Right-click in the white space and select "New Dependent layer"
- In the drop down box select IEStandaloneLauncher
- Close the Advanced Layer Editor
- Right-click on your IEStandalone layer and select "Hide From Operating System"
That's quite a few more steps but they produce something transparent to the end user which is what's important. The reason I made each layer and dependent of the other is so if one is ever activated the other will be but you only really need to set up one dependency-just make sure that's always the layer you activate for IE.