Öffnet ein Hyperlink in einer 32-Bit-Instanz von Internet Explorer 8 öffnen angegeben in einer 64-Bit-Instanz von Internet Explorer 8


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:
Weitere technische Informationen zum aktuellen kumulativen Sicherheitsupdate für Windows Internet Explorer finden Sie auf folgender Microsoft-Website:
Hinweis 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: