Příznaky
Jde o takovouto situaci:
-
Máte Windows Internet Explorer 8 nainstalovány v počítači se systémem 64bitové verze systému Windows 7 nebo Windows Server 2008 R2.
-
Spuštění 32bitové verze aplikace v tomto počítači.
-
Aplikace je hostitelem ovládacího prvku webového prohlížeče otevřete hypertextové odkazy pomocí funkce CoCreateInstance v zadané verze aplikace Internet Explorer 8. Bit verzi aplikace Internet Explorer 8, který je spuštěn závisí na stavu chráněný režim hypertextový odkaz.
V tomto scénáři aplikace nefunguje správně a 32bitové verze aplikace Internet Explorer 8 není spuštěna očekávaným způsobem. Místo toho 64bitovou verzi aplikace Internet Explorer je spuštěna bez ohledu na předdefinované konfigurace.
Například vyvinout aplikaci, která funguje takto:
-
Otevřete-li hypertextový odkaz, který je obsažen v zóně zabezpečení Internet , je spuštěna 32bitová verze aplikace Internet Explorer 8.
Poznámka: Chráněný režim je ve výchozím nastavení povolen v zóně zabezpečení Internet .
-
Otevřete-li hypertextový odkaz, který je obsažen v zóně zabezpečení Místní intranet nebo v zóně zabezpečení Důvěryhodné servery , je spuštěna 64bitová verze aplikace Internet Explorer 8.
Poznámka: Chráněný režim je ve výchozím nastavení zakázána v zóně zabezpečení Místní intranet a Důvěryhodné servery zóny zabezpečení.
V tomto příkladu je spuštěna 64bitová verze aplikace Internet Explorer bez ohledu na stav chráněný režim hypertextový odkaz.
Příčina
K tomuto problému dochází, protože je registrován žádný popisovač 32bitové InternetExplorerMedium identifikátoru třídy (CLSID).
Aplikace volá funkci CoCreateInstance pro vytvoření instance 32bitové verze aplikace Internet Explorer 8 v 64bitové verzi systému Windows 7 nebo Windows Server 2008 R2. Tato operace se nezdaří, pokud není k dispozici žádný popisovač 32bitové pro InternetExplorerMedium CLSID v běžícím operačním systému. V tomto scénáři funkce CoCreateInstance místo toho vytvoří instance 64-bit.
Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:
975377 funkce CoCreateInstance nelze použít k vytvoření instance 32bitové verze aplikace Internet Explorer v počítači se systémem 64bitové verze systému Windows 7
Řešení
Informace o aktualizaci zabezpečení
Chcete-li vyřešit tento problém, nainstalujte nejnovější kumulativní aktualizaci zabezpečení pro aplikaci Internet Explorer. Chcete-li to provést, navštivte následující web společnosti Microsoft:
http://update.microsoft.comDalší technické informace o nejnovější kumulativní aktualizaci zabezpečení pro aplikaci Internet Explorer naleznete na následujícím webu společnosti Microsoft:
http://www.microsoft.com/technet/security/current.aspxPoznámka: Tato aktualizace byla poprvé zahrnuta v aktualizaci zabezpečení 2360131 (MS10-071). Další informace získáte klepnutím na následující číslo článku databáze Microsoft Knowledge Base:
2360131 MS10-071: Kumulativní aktualizace zabezpečení pro aplikaci Internet Explorer
Jak potíže obejít
Chcete-li tento problém vyřešit, použijte jednu z následujících metod.
Metoda 1
Spustíte 32bitové instance aplikace Internet Explorer 8 před otevřít hypertextový odkaz v 32bitové aplikace. V tomto případě odkaz aktivace dochází v existující instance 32bitové verze aplikace Internet Explorer 8.
Metoda 2
Úprava podregistru HKEY_CLASSES_ROOT registru Chcete-li přidat chybějící obslužné rutiny pro InternetExplorerMedium identifikátor CLSID. Chcete-li to provést, zadejte na příkazovém řádku následující příkaz a stiskněte klávesu ENTER:
REG přidat "HKCR\Wow6432Node\CLSID\ {D5E8041D-920F-45E9-B8FB-B1DEB82C6E5E} \LocalServer32" /ve /t REG_EXPAND_SZ /d "% programfiles (x86) %\Internet Explorer\iexplore.exe - startmediumtab"
Metoda 3
Chcete-li přidat chybějící obslužné rutiny použijte následující skript prostředí 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
Další informace o tom, jak vytvořit a implementovat skripty prostředí PowerShell naleznete na následujícím webu společnosti Microsoft:
Informace o příkazovém řádku prostředí PowerShell a skriptování prostředí