Autor Beitrag
Gagga
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 95

Win 11
Delphi 12 Athen Pro
BeitragVerfasst: Mo 26.02.24 17:36 
Hallo!

Teste momentan Athen Professional und kann den EdgeBrowser nicht dazu bewegen, mir eine Website anzuzeigen. Gemacht habe ich in einem Test-Projekt Folgendes:

EdgeView2 SDK installiert und dann

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.FormCreate(Sender: TObject);
var
AnwPfad:string;
begin
AnwPfad := GetShellFolder($001A) +'\Projekt1\';
if directoryExists(Anwpfad) = false then CreateDir(Anwpfad);
Browser1.UserDataFolder := AnwPfad;
Browser1.CreateWebView;
end;

procedure TForm1.Browser1CreateWebViewCompleted(Sender: TCustomEdgeBrowser;
  AResult: HRESULT);
begin
Browser1.Navigate('https://entwickler-ecke.de');

end;


Im Verzeichnis AnwPfad liegt die WebView2Loader.dll.

Es tut sich nichts. Was fehlt?

Ergänzung: kompiliere ich für 64bit aus, funzzt es. Wie bekomme ich es für 32bit hin?

Gruß
Rüd

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 26.02.24 21:29 
user profile iconGagga hat folgendes geschrieben Zum zitierten Posting springen:
Ergänzung: kompiliere ich für 64bit aus, funzzt es. Wie bekomme ich es für 32bit hin?

Dann wirst du wohl die 64 Bit Version der DLL verwendet haben. Mit einem 32 Bit Programm kannst du diese nicht verwenden.
Gagga Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 95

Win 11
Delphi 12 Athen Pro
BeitragVerfasst: Mo 26.02.24 21:59 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconGagga hat folgendes geschrieben Zum zitierten Posting springen:
Ergänzung: kompiliere ich für 64bit aus, funzzt es. Wie bekomme ich es für 32bit hin?

Dann wirst du wohl die 64 Bit Version der DLL verwendet haben. Mit einem 32 Bit Programm kannst du diese nicht verwenden.

Nein, hatte die 32 Bit-Version hier heruntergeladen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 27.02.24 11:31 
user profile iconGagga hat folgendes geschrieben Zum zitierten Posting springen:
Nein, hatte die 32 Bit-Version hier heruntergeladen.
Von irgendwelchen DLL-Seiten irgendwelche Dateien herunterladen ist keine gute Idee. Im besten Falle klappt es, aber oft bekommst du auf solchen Seiten auch Viren und fast immer Versionen, mit denen du nichts anfangen kannst, wenn du die passende Version nicht gezielt suchst. In diesem Fall hast du dort eine uralte Vorversion 0.9x heruntergeladen, was dir natürlich nicht weiterhilft.

Es hat schon einen Sinn, dass nach der Installation des SDK automatisch der Redist-Ordner aufgeht. Dort findest du nämlich die weiterzugebenden Dateien wie der Name schon sagt. In diesem Fall die entsprechenden DLLs, mit denen es dann auch geht:
ausblenden Quelltext
1:
C:\Program Files (x86)\Embarcadero\Studio\23.0\Redist\win32\WebView2Loader.dll					

bzw.
ausblenden Quelltext
1:
C:\Program Files (x86)\Embarcadero\Studio\23.0\Redist\win64\WebView2Loader.dll					


Und wenn du auf der Festplatte nicht weißt, wo die Dateien liegen, hilft Everything blitzschnell weiter (anders als die leider nicht entsprechend umgesetzte Windows-Suche)...

Und zu deinem Quelltext:
Das reicht völlig aus:
ausblenden Delphi-Quelltext
1:
2:
  EdgeBrowser1.UserDataFolder := '%APPDATA%\Projekt1';
  EdgeBrowser1.CreateWebView;

Dass das so geht, siehst du, wenn du den Standardwert von UserDataFolder beachtest.

user profile iconGagga hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Quelltext
1:
2:
AnwPfad := GetShellFolder($001A) +'\Projekt1\';
if directoryExists(Anwpfad) = false then CreateDir(Anwpfad);
Wie wäre es so?
ausblenden Delphi-Quelltext
1:
2:
3:
AnwPfad := GetShellFolder(CSIDL_APPDATA) +'\Projekt1\';
if not DirectoryExists(Anwpfad) then
  CreateDir(Anwpfad);
Magic Numbers und Boolean-Vergleiche sind keine gute Idee.
Gagga Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 95

Win 11
Delphi 12 Athen Pro
BeitragVerfasst: Di 27.02.24 12:03 
Danke Sebastian,
aber auch die DLL bringt leider keine Änderung. Der EdgeBrowser zeigt in der 32Bit-Version des Testprogramms nichts an, in der 64Bit-Version sehr wohl.

Irgendeine Idee, woran es liegen kann?

Gruß
Rüd
Gagga Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 95

Win 11
Delphi 12 Athen Pro
BeitragVerfasst: Di 27.02.24 15:10 
Übrigens funktioniert der Seitenaufruf in der 64Bit-Version auch mit der 32Bit-Version der webview2loader.dll.

Wenn ich aber in der 32Bit-Version meines Programms den EdgeBrowser nicht zum Laufen bringe, ist der Kauf von Delphi Athen Pro kein Thema für mich.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 27.02.24 15:47 
user profile iconGagga hat folgendes geschrieben Zum zitierten Posting springen:
Übrigens funktioniert der Seitenaufruf in der 64Bit-Version auch mit der 32Bit-Version der webview2loader.dll.
Das kann nicht sein. Dann wird da eine andere auf deinem System verwendet.

Das siehst du sehr einfach mit dem Process Monitor. Wenn du dort den Filter auf "Process Name" is "<Name deiner Exe>" setzt, siehst du, was diese macht. In diesem Fall siehst du, wo die DLL gesucht und wo sie gefunden und genutzt wird.

Im Anhang findest du ein minimales Beispielprojekt inkl. der mit der Delphi 12 Trial kompilierten Exen in den Unterverzeichnissen Win32 bzw. Win64 mit den passenden DLLs. Das funktioniert hier so problemlos. Beides zusammen wäre zu groß gewesen, es ist in beiden Zips das gleiche Projekt mit dem jeweiligen Unterverzeichnis drin.
Einloggen, um Attachments anzusehen!
Gagga Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 95

Win 11
Delphi 12 Athen Pro
BeitragVerfasst: Di 27.02.24 16:46 
ENDLICH!!!

Ganz herzlichen Dank Sebastian für Deine Tipps und Deine Geduld! Der Process Monitor hat mich auf die Spur gebracht. Da ich irgendwo gelesen hatte, dass es Probleme gibt, wenn die WebView2Loader.dll in einem schreibgeschütztem Ordner liegt - wie Programmverzeichnis -, habe ich sie in den Ordner %APPDATA%\Projekt1 gepackt. Ich war der wohl irrigen Annahme, dass der Browser in dem Verzeichnis ausgeführt wird und dort die dll findet.

Beste Grüß
Rüd
Gagga Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 95

Win 11
Delphi 12 Athen Pro
BeitragVerfasst: Do 29.02.24 18:54 
Letzte Frage zu dem Thema: lässt sich eigentlich verhindern, dass der EdgeBrowser im UserdataFolder ein Verzeichnis "EBWebView" mit 70 Ordnern beschreibt?

Gruß
Rüd
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 29.02.24 23:00 
Irgendwo müssen die Dateien hin. Du kannst nur wählen in welchen Ordner sie kommen.
Gagga Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 95

Win 11
Delphi 12 Athen Pro
BeitragVerfasst: Fr 01.03.24 00:52 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Irgendwo müssen die Dateien hin. Du kannst nur wählen in welchen Ordner sie kommen.

Okay, dann lege ich für UserdataFolder den Temp-Ordner fest.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 01.03.24 07:23 
user profile iconGagga hat folgendes geschrieben Zum zitierten Posting springen:
Okay, dann lege ich für UserdataFolder den Temp-Ordner fest.
Vorsicht, wenn mehrere Tools das machen, kommen die sich ins Gehege. Du solltest auch dort einen Unterordner z.B. mit dem Namen deines Programms verwenden.

Davon abgesehen ist die Frage, ob dein Tool bestimmte Webseiten wirklich nur einmal besucht, denn nur dann würde der Temp-Ordner Sinn machen. Bei mehrfachen Besuchen sollte der Cache ja bestehen bleiben, damit es schneller geht. Es gibt in Delphi auch Funktionen, um viele dieser speziellen Ordner direkt zu bekommen, zum Beispiel:
System.IOUtils --> TPath.GetCachePath
Das zeigt unter Windows auf das lokale AppData Verzeichnis, das auch sinnvoller ist als das AppData-Verzeichnis, das zwischen verschiedenen Rechnern synchronisiert wird, welches du ursprünglich verwendet hast.
Gagga Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 95

Win 11
Delphi 12 Athen Pro
BeitragVerfasst: Fr 01.03.24 10:36 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconGagga hat folgendes geschrieben Zum zitierten Posting springen:
Okay, dann lege ich für UserdataFolder den Temp-Ordner fest.
Vorsicht, wenn mehrere Tools das machen, kommen die sich ins Gehege. Du solltest auch dort einen Unterordner z.B. mit dem Namen deines Programms verwenden.

Davon abgesehen ist die Frage, ob dein Tool bestimmte Webseiten wirklich nur einmal besucht, denn nur dann würde der Temp-Ordner Sinn machen. Bei mehrfachen Besuchen sollte der Cache ja bestehen bleiben, damit es schneller geht. Es gibt in Delphi auch Funktionen, um viele dieser speziellen Ordner direkt zu bekommen, zum Beispiel:
System.IOUtils --> TPath.GetCachePath
Das zeigt unter Windows auf das lokale AppData Verzeichnis, das auch sinnvoller ist als das AppData-Verzeichnis, das zwischen verschiedenen Rechnern synchronisiert wird, welches du ursprünglich verwendet hast.


Danke für den Hinweis. Unterordner werde ich entsprechend spezifizieren. Das Tool besucht die konkrete Seite nur einmal. Da sind wir dann im Temp-Ordner gut aufgehoben.