Problembeschreibung
Betrachten Sie das folgende Szenario:
-
Sie haben Windows Internet Explorer 8 auf einem Computer mit einer 64-Bit-Version von Windows 7 oder Windows Server 2008 R2 installiert.
-
Eine 32-Bit-Version einer Anwendung auf diesem Computer ausgeführt.
-
Die Anwendung hostet das Webbrowser-Steuerelement öffnen Hyperlinks im angegebenen Bit-Versionen von Internet Explorer 8 mithilfe der CoCreateInstance -Funktion. Die Bit-Version von Internet Explorer 8, die gestartet wird hängt von der geschützten Status des Hyperlinks.
In diesem Szenario die Anwendung nicht ordnungsgemäß funktioniert, und 32-Bit-Version von Internet Explorer 8 nicht wie erwartet gestartet. Stattdessen wird die 64-Bit-Version von Internet Explorer unabhängig von der vorgegebenen Konfiguration gestartet.
Sie entwickeln beispielsweise eine Anwendung, wie folgt:-
Wenn Sie einen Hyperlink, der in der Sicherheitszone Internet enthalten ist öffnen, wird die 32-Bit-Version von Internet Explorer 8 gestartet.
Hinweis Der geschützte Modus ist standardmäßig in der Sicherheitszone Internet aktiviert.
-
Wenn Sie einen Hyperlink, der in der lokalen Intranetzone oder in der vertrauenswürdigen Sites enthalten ist öffnen, wird die 64-Bit-Version von Internet Explorer 8 gestartet.
Hinweis Standardmäßig ist der geschützte Modus Sicherheitszone Lokales Intranet und Vertrauenswürdige Sites Sicherheitszone deaktiviert.
In diesem Beispiel wird die 64-Bit-Version von Internet Explorer unabhängig vom Status der geschützte Modus des Hyperlinks gestartet.
Ursache
Dieses Problem tritt auf, weil keine 32-Bit-Handler für InternetExplorerMedium -Klassenbezeichner (CLSID) registriert ist.
Eine Anwendung ruft die CoCreateInstance -Funktion um eine 32-Bit-Instanz von Internet Explorer 8 in einer 64-Bit-Version von Windows 7 oder Windows Server 2008 R2 erstellen. Dieser Vorgang schlägt fehl, wenn keine 32-Bit-für InternetExplorerMedium CLSID im laufenden Betriebssystem Handler. In diesem Szenario erstellt die CoCreateInstance -Funktion stattdessen eine 64-Bit-Instanz. Klicken Sie für weitere Informationen auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:975377 die CoCreateInstance-Funktion können Sie erstellen eine Instanz der 32-Bit-Version von Internet Explorer auf einem Computer mit der 64-Bit-Version von Windows 7
Problemlösung
Informationen zum Sicherheitsupdate
Um dieses Problem zu beheben, installieren Sie das neueste kumulative Sicherheitsupdate für Windows Internet Explorer. Besuchen Sie hierzu folgende Microsoft-Website:
http://update.microsoft.comWeitere technische Informationen zum aktuellen kumulativen Sicherheitsupdate für Windows Internet Explorer finden Sie auf folgender Microsoft-Website:
http://www.microsoft.com/technet/security/current.aspxHinweis Dieses Update war erstmals in Sicherheitsupdate 2360131 (MS10-071) enthalten. Für Weitere Informationen klicken Sie auf die folgenden Artikelnummer der Microsoft Knowledge Base:
2360131 MS10-071: Kumulatives Sicherheitsupdate für Internet Explorer
PROBLEMUMGEHUNG
Um dieses Problem zu umgehen, verwenden Sie eine der folgenden Methoden:
Methode 1
Starten Sie eine 32-Bit-Instanz von Internet Explorer 8, bevor Sie einen Hyperlink in der 32-Bit-Anwendung öffnen. In diesem Szenario tritt Link Aktivierung in vorhandenen 32-Bit-Instanz von Internet Explorer 8.
Methode 2
Ändern Sie die Registrierungsstruktur HKEY_CLASSES_ROOT , um fehlende Handler für InternetExplorerMedium CLSID hinzuzufügen. Hierzu geben Sie folgenden Befehl ein und drücken SIE:
REG hinzufügen "HKCR\Wow6432Node\CLSID\ {D5E8041D-920F-45E9-B8FB-B1DEB82C6E5E} \LocalServer32" / VE t REG_EXPAND_SZ/d "% ProgramFiles% (x86) %\Internet Explorer\iexplore.exe - Startmediumtab"
Methode 3
Verwenden Sie das folgende PowerShell-Skript fehlen Handler hinzugefügt:$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 Weitere Informationen zum Erstellen und Implementieren von PowerShell-Skripts finden Sie auf folgender Microsoft-Website:Informationen zu PowerShell-Befehlszeile und scripting-Umgebung