2012-03-27 21 views
2

Im Entwickeln einer benutzerdefinierten Browser-Lösung mit .net Webbrowser-Steuerelement. die IE-Compatibilty Ansicht zu deaktivieren, setze ich den Registrierungseintrag Software \ Microsoft \ Internet Explorer \ Main \ Featurecontrol \ FEATURE_BROWSER_EMULATION:Webbrowser-Steuerelement ignoriert FEATURE_BROWSER_EMULATION Registrierungseintrag

[Sreenshot regedit] http://zbirk.mirk.at/browserreg.png "Screenshot"

i die Werte zu verwenden versucht, : dword = 8000, dword = 8888, dword = 9000, aber das Webbrowser-Steuerelement scheint diese Registrierungseinträge zu ignorieren.

Vielleicht hatte jemand diese Probleme auch und kann mir helfen.

+1

Dieses Problem tritt konsistent auf, wenn VS2010 x64 im Debugger ausgeführt wird. Nach dem Veröffentlichen der Anwendung und dem Ausführen der EXE-Datei wird jedoch die von Ihnen beschriebene Registrierungseinstellung ordnungsgemäß übernommen. – pgfearo

Antwort

3

Das WebBrowser-Steuerelement respektiert diese Schlüssel auf jeden Fall.

Denken Sie daran, dass während taskman in der Namensspalte zeigen anwendung.exe kann, wenn Sie die exe-Namen debuggen ist application.vshost.exe

Also in meiner Anwendung sI einfach die Taste, um die App jedes Mal zu erstellen versuchen, läuft. Wenn es nicht erstellt werden kann (weil es bereits existiert), fahre ich fort, wenn es den Schlüssel erstellt, dann informiere ich den Benutzer, dass er die Anwendung neu starten muss.

1

Thx für Ihre Antwort, jetzt funktioniert es.

Sie ist mein Arbeitsfrieden Code:

public void setIEcomp() 
    { 
     String appname = Process.GetCurrentProcess().ProcessName+".exe"; 
     RegistryKey RK8 = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION",RegistryKeyPermissionCheck.ReadWriteSubTree);    
     int value9 = 9999; 
     int value8 = 8888; 
     Version ver = webBrowser1.Version; 
     int value = value9; 
     try 
     { 
      string[] parts = ver.ToString().Split('.'); 
      int vn = 0; 
      int.TryParse(parts[0], out vn); 
      if (vn != 0) 
      { 
       if (vn == 9) 
        value = value9; 
       else 
        value = value8; 
      } 
     } 
     catch 
     { 
      value = value9; 
     } 
     //Setting the key in LocalMachine 
     if (RK8 != null) 
     { 
      try 
      { 
       RK8.SetValue(appname, value, RegistryValueKind.DWord); 
       RK8.Close(); 
      } 
      catch(Exception ex) 
      { 
       //MessageBox.Show(ex.Message); 
      } 
     } 
    } 
+1

Wenn Sie es gelöst haben, sollten Sie eine Antwort akzeptieren. Hast du es gelöst? – Coder12345

+0

Ich frage mich, ob Sie ursprünglich die 64-Bit-Ansicht der Registrierung mit Regedit bearbeitet haben.Wenn Sie programmgesteuert den Schlüssel änderten, funktionierte es, weil Ihr Programm die 32-Bit-Ansicht der Registrierung bearbeitet hat. – Wally

2

sicherzustellen, dass Sie nicht

der App-Name also anders würde appname.vshost.exe

0

auch innerhalb vshost laufen kann ich Ich sehe nicht, dass FEATURE_BROWSER_EMULATION in meiner Anwendung einen Unterschied gemacht hat.

Ich habe die FEATURE_BROWSER_EMULATION-Funktionalität getestet, indem ich die Registrierung manuell mit regedit bearbeitet habe. Nichts, was ich tat, machte einen Unterschied. Meine gehostete Seite funktionierte immer noch nicht mit neuem JavaScript und konnte keine externen Bibliotheken laden.

fand ich meinen Fehler:

Ich war die Bearbeitung der 64-Bit-Ansicht der Registrierung mit Regedit. Meine App wurde als 32-Bit-App ausgeführt und betrachtete die 32-Bit-Ansicht der Registrierung. Das ist der Grund, warum meine Änderungen in der Registrierung keinen Einfluss auf meine Anwendung hatten. Übrigens lautet die WPF-Projektvorlage standardmäßig "32-Bit bevorzugen".

manuell mit regedit Bearbeitung innerhalb der Wow6432Node Schlüssel gearbeitet:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ Featurecontrol \ FEATURE_BROWSER_EMULATION

Natürlich wird den DWORD-Wert programmatisch in Ihrer Anwendung einstellen funktionieren auch, da Ihre 32-Bit-Anwendung innerhalb des Wow6432Node bearbeitet wird.