Symptoms
Consider the following scenario:
-
You have Windows Internet Explorer 8 installed on a computer that is running a 64-bit version of Windows 7 or of Windows Server 2008 R2.
-
You run a 32-bit version of an application on this computer.
-
The application hosts the web browser control to open hyperlinks in specified bit versions of Internet Explorer 8 by using the CoCreateInstance function. The bit version of Internet Explorer 8 that is started depends on the protected mode status of the hyperlink.
In this scenario, the application does not work correctly and the 32-bit version of Internet Explorer 8 is not started as expected. Instead, the 64-bit version of Internet Explorer is started regardless of the predefined configuration.
For example, you develop an application that works as follows:-
If you open a hyperlink that is included in the Internet security zone, the 32-bit version of Internet Explorer 8 is started.
Note By default, the protected mode is enabled in the Internet security zone.
-
If you open a hyperlink that is included in the Local intranet security zone or in the Trusted sites security zone, the 64-bit version of Internet Explorer 8 is started.
Note By default, the protected mode is disabled in the Local intranet security zone and in the Trusted sites security zone.
In this example, the 64-bit version of Internet Explorer is started regardless of the protected mode status of the hyperlink.
Cause
This issue occurs because no 32-bit handler for the InternetExplorerMedium class identifier (CLSID) is registered.
An application calls the CoCreateInstance function to create a 32-bit instance of Internet Explorer 8 in a 64-bit version of Windows 7 or of Windows Server 2008 R2. This operation fails when there is no 32-bit handler for the InternetExplorerMedium CLSID in the running operating system. In this scenario, the CoCreateInstance function creates a 64-bit instance instead. For more information, click the following article number to view the article in the Microsoft Knowledge Base:975377 You cannot use the CoCreateInstance function to create an instance of the 32-bit version of Internet Explorer on a computer that is running the 64-bit version of Windows 7
Resolution
Security update information
To resolve this problem, install the most recent cumulative security update for Windows Internet Explorer. To do this, visit the following Microsoft website:
http://update.microsoft.comFor more technical information about the most recent cumulative security update for Windows Internet Explorer, visit the following Microsoft website:
http://www.microsoft.com/technet/security/current.aspxNote This update was first included in security update 2360131 (MS10-071). For more information, click the following article number to view the article in the Microsoft Knowledge Base:
2360131 MS10-071: Cumulative security update for Internet Explorer
Workaround
To work around this issue, use one of the following methods.
Method 1
Start a 32-bit instance of Internet Explorer 8 before you open a hyperlink in the 32-bit application. In this scenario, link activation occurs in the existing 32-bit instance of Internet Explorer 8.
Method 2
Modify the HKEY_CLASSES_ROOT registry hive to add the missing handler for the InternetExplorerMedium CLSID. To do this, type the following command at a command prompt and then press ENTER:
Reg add "HKCR\Wow6432Node\CLSID\{D5E8041D-920F-45E9-B8FB-B1DEB82C6E5E}\LocalServer32" /ve /t REG_EXPAND_SZ /d "%programfiles(x86)%\Internet Explorer\iexplore.exe -startmediumtab"
Method 3
Use the following PowerShell script to add the missing handler:$acl = Get-Acl HKLM:\SOFTWARE\Wow6432Node\Classes\CLSID\`{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E`}
$acl.Owner $person = [System.Security.Principal.NTAccount]"Administrators" $acl.SetOwner($person) $acl.Owner $access = [System.Security.AccessControl.RegistryRights]"FullControl" $inheritance = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit" $propagation = [System.Security.AccessControl.PropagationFlags]"InheritOnly" $type = [System.Security.AccessControl.AccessControlType]"Allow" $rule = New-Object System.Security.AccessControl.RegistryAccessRule( $person,$access,$inheritance,$propagation,$type) $acl.ResetAccessRule($rule) $person = [System.Security.Principal.NTAccount]"Everyone" $access = [System.Security.AccessControl.RegistryRights]"ReadKey" $inheritance = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit" $propagation = [System.Security.AccessControl.PropagationFlags]"InheritOnly" $type = [System.Security.AccessControl.AccessControlType]"Allow" $rule = New-Object System.Security.AccessControl.RegistryAccessRule($person,$access,$inheritance,$propagation,$type) $acl.ResetAccessRule($rule) Set-Acl HKLM:\SOFTWARE\Wow6432Node\Classes\CLSID\`{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E`} $acl New-ItemProperty HKLM:\SOFTWARE\Wow6432Node\Classes\CLSID\`{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E`} -name "AppID" -value "`{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E`}" -propertyType String New-ItemProperty HKLM:\SOFTWARE\Wow6432Node\Classes\CLSID\`{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E`}\LocalServer32 "(default)" -value '"%ProgramFiles(x86)%\Internet Explorer\iexplore.exe" -startmediumtab"' -propertyType ExpandString For more information about how to create and implement PowerShell scripts, visit the following Microsoft website:Information about the PowerShell command line and the scripting environment