Симптоми
Да разгледаме следния сценарий:
-
Имате Windows Internet Explorer 8, инсталирани на компютър с 64-битова версия на Windows 7 или Windows Server 2008 R2.
-
Изпълнявате 32-битова версия на приложение на този компютър.
-
Приложението е домакин на управлението на уеб браузър, за да отворите хипервръзки в посочения битовите версии на Internet Explorer 8 чрез функцията CoCreateInstance . Битова версия на Internet Explorer 8, който е стартиран зависи от състоянието на защитен режим на хипервръзката.
В този случай приложението не работи правилно и 32-битова версия на Internet Explorer 8 не се стартира според очакванията. Вместо това 64-битова версия на Internet Explorer се стартира независимо предварително конфигурация.
Например разработване на приложение, което работи по следния начин:
-
Ако отворите хипервръзка, която е включена в зоната за сигурност в интернет , 32-битова версия на Internet Explorer 8 се стартира.
Забележка: По подразбиране защитеният режим е разрешен в интернет зоната за защита.
-
Ако отворите хипервръзка, която е включена в зоната на локалния интранет защита или зоната с надеждни сайтове сигурност, 64-битова версия на Internet Explorer 8 се стартира.
Забележка: По подразбиране защитеният режим е забранено в зоната на локалния интранет защита и в зоната за защита на надеждни сайтове .
В този пример 64-битова версия на Internet Explorer се стартира независимо от състоянието на защитен режим на хипервръзката.
Причина
Този проблем възниква, защото няма 32-битов манипулатор за InternetExplorerMedium идентификатор за класа (CLSID) е регистрирана.
Дадено приложение извиква функцията CoCreateInstance за създаване на 32-битов екземпляр на Internet Explorer 8 в 64-битова версия на Windows 7 или Windows Server 2008 R2. Тази операция не успее, когато няма няма 32-битов манипулатор за InternetExplorerMedium CLSID на операционната система работи. В този случай функцията CoCreateInstance създава екземпляр на 64-битова вместо това.
За повече информация щракнете върху следния номер на статия в базата знания на Microsoft:
975377 не можете да използвате функцията CoCreateInstance да създаде екземпляр на 32-битова версия на Internet Explorer на компютър с 64-битова версия на Windows 7
Решение
Информация за актуализация на защитата
За да разрешите този проблем, инсталирайте най-новата сборна актуализация на защитата за Windows Internet Explorer. За целта посетете следния уеб сайт на Microsoft:
http://update.microsoft.comЗа повече информация относно най-новата сборна актуализация на защитата за Windows Internet Explorer посетете следния уеб сайт на Microsoft:
http://www.microsoft.com/technet/security/current.aspxЗабележка: Първо тази актуализация е включена в актуализация на защитата 2360131 (MS10-071). За повече информация щракнете върху следния номер на статия в базата знания на Microsoft:
2360131 MS10-071: кумулативна актуализация на защитата за Internet Explorer
Заобикаляне на проблема
За да заобиколите този проблем, използвайте един от следните методи.
Метод 1
Стартиране на 32-битов екземпляр на Internet Explorer 8, преди да отворите хипервръзка в 32-битово приложение. В този случай връзката активиране възниква в съществуващи 32-битови екземпляр на Internet Explorer 8.
Метод 2
Променете HKEY_CLASSES_ROOT регистъра остава да добавите липсващите манипулатор за InternetExplorerMedium CLSID. За целта въведете следната команда в командния ред и натиснете 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"
Метод 3
Използвайте следния скрипт PowerShell да добавите липсващите манипулатор:$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
За повече информация относно начините за създаване и изпълнение на PowerShell скриптове посетете следния уеб сайт на Microsoft: