Cef Sharp Chromebrowser gibt unkorrekte Werte an

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 67 Antworten in diesem Thema. Der letzte Beitrag () ist von Westerwälder.

    Cef Sharp Chromebrowser gibt unkorrekte Werte an

    Guten Morgen,

    da der Webbrowser (IE11 basierend) immer mehr Probleme auf diversen Internetseiten macht, habe ich auf den Cef Sharp Browser umgestellt.
    Version 79.0, Download am 20.05.2020

    Übermittelt wird die falsche Windosversion
    Adresse Wie ist meine IP wird Windows 8 gemeldet. Besuche ich die gleiche Seite mit Firefox erscheint die richtige Version Windows 10.

    Beim Sicherheitscheck der Sparkasse erhalte ich folgendes:

    Ihr Google Chrome-Browser ist veraltet.
    Der Sparkassen-Computercheck erkennt auf Ihrem Computer das Betriebssystem Windows 8.

    Da ich gerne weiterhin AnyCpu benutzen möchte, muss wohl folgender Code ausgeführt werden:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Class SurroundingClass
    2. <STAThread>
    3. Public Shared Sub Main()
    4. AppDomain.CurrentDomain.AssemblyResolve += AddressOf Resolver 'Fehler: Verwenden Sie eine RaiseEvent-Anweisung, um ein Ereignis aufzurufen.
    5. LoadApp()
    6. End Sub
    7. <MethodImpl(MethodImplOptions.NoInlining)>
    8. Private Shared Sub LoadApp()
    9. Dim settings = New CefSettings()
    10. settings.BrowserSubprocessPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, If(Environment.Is64BitProcess, "x64", "x86"), "CefSharp.BrowserSubprocess.exe")
    11. Cef.Initialize(settings, performDependencyCheck:=False, browserProcessHandler:=Nothing)
    12. Dim browser = New BrowserForm()
    13. Application.Run(browser)
    14. End Sub
    15. Private Shared Function Resolver(ByVal sender As Object, ByVal args As ResolveEventArgs) As Assembly
    16. If args.Name.StartsWith("CefSharp") Then
    17. Dim assemblyName As String = args.Name.Split({","c}, 2)(0) & ".dll"
    18. Dim archSpecificPath As String = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, If(Environment.Is64BitProcess, "x64", "x86"), assemblyName)
    19. Return If(File.Exists(archSpecificPath), Assembly.LoadFile(archSpecificPath), Nothing)
    20. End If
    21. Return Nothing
    22. End Function
    23. End Class



    Da mein Programm nicht mit der Browser-Form starten soll, weiss ich nicht genau wo ich diesen Code plazieren soll.
    Gruß Markus

    Westerwälder schrieb:

    weiss ich nicht genau wo ich diesen Code plazieren soll.
    Da brauchst Du einen Programm-Rumpf ohne den VisualBasic-Overhead.
    Erstell mal in C# eine WinForm-Anwendung und sieh Dir die Datei Program.cs an, da müsste der Code wohl hin.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das Zuweisen eines Events an einen EventHandler sollte nur an eine Sub erfolgen, nicht an eine Function. Denn was passiert mit dem Rückgabewert der Function, wenn das Event gefeuert wird? Es fällt unter den Tisch.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Guten Morgen Rod,

    C#-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Threading.Tasks;
    5. using System.Windows.Forms;
    6. namespace MBCHome
    7. {
    8. static class Program
    9. {
    10. /// <summary>
    11. /// Der Haupteinstiegspunkt für die Anwendung.
    12. /// </summary>
    13. [STAThread]
    14. static void Main()
    15. {
    16. Application.EnableVisualStyles();
    17. Application.SetCompatibleTextRenderingDefault(false);
    18. Application.Run(new Menue());
    19. }
    20. }
    21. }


    Nur programmiere ich unter VB.Net. Wie soll das zusammen kommen?

    Der Code stammt von github.com/cefsharp/CefSharp/issues/1714

    Gruß Markus

    Westerwälder schrieb:

    Wie soll das zusammen kommen?
    Mach Dir ein C#-Projekt als Vorlage und erstell ein VB.NET-Projekt ohne VisualBasic.
    • Projekt - Anwendung: Anwendungsframework deaktivieren
    • Projekt - Verweise: Microsoft.VisualBasic rauswerfen
    • dem Projekt das Program-Modul Program.vb hinzufügen:

      VB.NET-Quellcode

      1. Module Program
      2. <STAThread>
      3. Sub Main()
      4. Application.EnableVisualStyles()
      5. Application.SetCompatibleTextRenderingDefault(False)
      6. Application.Run(New Form1())
      7. End Sub
      8. End Module

    • Projekt - Anwendung: Startobjekt Sub Main festlegen
    Dies funktioniert bei mir, ein Haltepunkt bei Application.Run(New Form1()) zeigt dies.
    Nun pack da Deinen Code rein und berichte von Deinen Erfahrungen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke Rod für deinen Vorschlag.

    Wenn ich nun Verweise: Microsoft.VisualBasic rauswerfe bekomme ich sicher in meiner Hauptanwendung Probleme.
    Die Browserform ist eine von zig Formen.
    Oder sehe ich das falsch?
    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Westerwälder“ ()

    Westerwälder schrieb:

    Die Browserform ist eine von zig Formen.
    Da musst Du mal ein wenig experimentieren.
    Ist der Browser eine Form oder ist der Browser ein Control?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ein Control.

    Hier die Settings

    VB.NET-Quellcode

    1. Public Class CCefCromBrowser
    2. Public Browsersettings As CefSharp.WinForms.CefSettings
    3. Public Sub New()
    4. Browsersettings = New CefSharp.WinForms.CefSettings
    5. With Browsersettings
    6. .Locale = "de-DE"
    7. .PersistSessionCookies = True
    8. .PersistUserPreferences = True
    9. .IgnoreCertificateErrors = True
    10. .CachePath = .BrowserSubprocessPath & "Daten"
    11. End With
    12. CefSharp.Cef.Initialize(Browsersettings)
    13. End Sub
    14. End Class


    Und dann in der Form_Load

    VB.NET-Quellcode

    1. Browser = New ChromiumWebBrowser("http://www.google.de") With {.Dock = DockStyle.Fill}
    2. Panel_Browser.Controls.Add(Browser)

    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Westerwälder“ ()

    Was hat die Klasse CCefCromBrowser mit Browser = New ChromiumWebBrowser zu tun?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Westerwälder schrieb:

    Eine Control.
    Dann brauchst Du eine Form, wo Du das im Designer draufziehst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich blick grad weder, was das mit meiner Frage aus Post#9 zu tun hat, noch was Du jetzt als Code im Gesamten probiert hast, was dann aber scheitert.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Missverständnis.

    Der Code funktioniert bisher ohne Problme.
    Kann ihn ja erst auf einem 32-bit-Rechner testen, wenn diese Sub ausgeführt wird.

    VB.NET-Quellcode

    1. Public Sub New()
    2. Browsersettings = New CefSharp.WinForms.CefSettings
    3. With Browsersettings
    4. .BrowserSubprocessPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, If(Environment.Is64BitProcess, "x64", "x86"), "CefSharp.BrowserSubprocess.exe") ' NEU
    5. .Locale = "de-DE"
    6. .PersistSessionCookies = True
    7. .PersistUserPreferences = True
    8. .IgnoreCertificateErrors = True
    9. .CachePath = .BrowserSubprocessPath & "Daten"
    10. End With
    11. CefSharp.Cef.Initialize(Browsersettings, performDependencyCheck:=False, browserProcessHandler:=Nothing)
    12. End Sub


    Denke das nur in den settings zu ändern, reicht nicht aus.
    Gruß Markus

    Westerwälder schrieb:

    kann aber nicht den Verweis raus werfen.
    Welchen Verweis?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Es wäre sinnvoll, wenn Du darauf eingehst, @Westerwälder:

    VaporiZed schrieb:

    Was hat die Klasse CCefCromBrowser mit Browser = New ChromiumWebBrowser zu tun?

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Westerwälder schrieb:

    Projekt - Anwendung: Anwendungsframework deaktivieren
    Projekt - Verweise: Microsoft.VisualBasic rauswerfen
    Was geht da nicht?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Glaube ich verstehe das nicht wirklich.

    Mach Dir ein C#-Projekt als Vorlage und erstell ein VB.NET-Projekt ohne VisualBasic.

    Dieses VB.Net-Projekt besteht bereits (zig Formen).
    Wenn ich dort nun den Verweis rausnehme ist das Teil nicht mehr nutzbar.
    Gruß Markus
    @Westerwälder Da gibt es zwei Möglichkeiten:
    - Du programmierst in VB.NET und nicht in VB6
    oder
    - Du machst ein neues VB.NET-Projekt und programmierst gleich in VB.NET.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Microsoft.VisualBasic ist nicht als Verweis gesetzt
    aber als Importierte Namespaces.

    Folgendes musste ich nach der Deaktivierung des Anwendungsframework rausnehmen:

    ApplicationEvents.vb
    'Private Sub MyApplication_UnhandledException(sender As Object, e As UnhandledExceptionEventArgs) Handles Me.UnhandledException
    ' MsgBox(e.Exception.Message)
    'End Sub

    C-Datei Program.cs

    C#-Quellcode

    1. using System;
    2. using System.Reflection;
    3. using System.Runtime.CompilerServices;
    4. using System.Windows.Forms;
    5. namespace MBCHome
    6. {
    7. static class Program
    8. {
    9. /// <summary>
    10. /// Der Haupteinstiegspunkt für die Anwendung.
    11. /// </summary>
    12. [STAThread]
    13. static void Main()
    14. {
    15. AppDomain.CurrentDomain.AssemblyResolve += Resolver;
    16. LoadApp();
    17. Application.EnableVisualStyles();
    18. Application.SetCompatibleTextRenderingDefault(false);
    19. Application.Run(new Menue());
    20. }
    21. [MethodImpl(MethodImplOptions.NoInlining)]
    22. private static void LoadApp()
    23. {
    24. //var settings = new CefSettings();
    25. //// Set BrowserSubProcessPath based on app bitness at runtime
    26. //settings.BrowserSubprocessPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase,
    27. // Environment.Is64BitProcess ? "x64" : "x86",
    28. // "CefSharp.BrowserSubprocess.exe");
    29. //// Make sure you set performDependencyCheck false
    30. //Cef.Initialize(settings, performDependencyCheck: false, browserProcessHandler: null);
    31. //var browser = new BrowserForm();
    32. //Application.Run(browser);
    33. }
    34. private static Assembly Resolver(object sender, ResolveEventArgs args)
    35. {
    36. if (args.Name.StartsWith("CefSharp"))
    37. {
    38. string assemblyName = args.Name.Split(new[] { ',' }, 2)[0] + ".dll";
    39. string archSpecificPath = System .IO. Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase,
    40. Environment.Is64BitProcess ? "x64" : "x86",
    41. assemblyName);
    42. return System.IO.File.Exists(archSpecificPath)
    43. ? Assembly.LoadFile(archSpecificPath)
    44. : null;
    45. }
    46. return null;
    47. }
    48. }
    49. }


    Die Sachen in der void LoadApp mache ich bei den Settings (siehe Post 13).

    Vb-Program.vb

    VB.NET-Quellcode

    1. Namespace MBHome
    2. Class Program
    3. <STAThread>
    4. Private Sub Main()
    5. AppDomain.CurrentDomain.AssemblyResolve += AddressOf Resolver 'Fehler: AssemblyResolve As ResolveEventHandler ist ein Ereignis und kann nicht aufgerufen werden.
    6. ' Verwenden Sie eine RaiseEvent-Anweisung, um ein Ereignis aufzurufen.
    7. LoadApp()
    8. Application.EnableVisualStyles()
    9. Application.SetCompatibleTextRenderingDefault(False)
    10. Application.Run(New StartIni())
    11. End Sub
    12. <MethodImpl(MethodImplOptions.NoInlining)>
    13. Private Sub LoadApp()
    14. 'Dim settings = New CefSettings()
    15. 'settings.BrowserSubprocessPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, If(Environment.Is64BitProcess, "x64", "x86"), "CefSharp.BrowserSubprocess.exe")
    16. 'cef.Initialize(settings, performDependencyCheck:=False, browserProcessHandler:=Nothing)
    17. 'Dim browser = New BrowserForm()
    18. 'Application.Run(browser)
    19. End Sub
    20. Public Function Resolver(ByVal sender As Object, ByVal args As ResolveEventArgs) As Assembly
    21. If args.Name.StartsWith("CefSharp") Then
    22. Dim assemblyName As String = args.Name.Split({","c}, 2)(0) & ".dll"
    23. Dim archSpecificPath As String = System.IO.Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, If(Environment.Is64BitProcess, "x64", "x86"), assemblyName)
    24. Return If(System.IO.File.Exists(archSpecificPath), Assembly.LoadFile(archSpecificPath), Nothing)
    25. End If
    26. Return Nothing
    27. End Function
    28. End Class
    29. End Namespace


    Bekomme ich nun den Fehler in Zeile #6, welcher bei C nicht auftritt.

    Weiterer Fehler beim Starten:


    Fehler BC30002 Der Typ "MBHome.ExpTree" ist nicht definiert. (Importiertes Fremdcontrol)
    Fehler BC30737 Es wurde keine zugreifbare Main-Methode mit entsprechender Signatur in "MBHome" gefunden.






    Gruß Markus

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Westerwälder“ ()