Entwickler-Ecke

WPF / Silverlight - WebView2 in WPF Anwendung für mehrere Benutzer


Günther Weber - Fr 15.09.23 14:11
Titel: WebView2 in WPF Anwendung für mehrere Benutzer

Hallo, Ich habe eine Wpf Anwendung erstellt die in einem Netzlaufwerk von mehreren Benutzern aufgerufen wird. Die Anwendung beinhaltet einen WebView2 Browser, der aber nicht bei allen Benutzern funktioniert. Der Browser legt einen Unterordner Programmname.exe.WebView2 an um dort temporäre Dateien zu speichern. Ich vermute, wenn ich den Ordner Benutzername.WebView2 nennen kann, sind die Probleme behoben.

Bei meiner Recherche bin ich auf die CoreWebView2Environment.CreateAsync Methode gestoßen, bei der ich die Eigenschaft userDataFolder übergeben soll. Ich habe aber überhaupt keine Idee, wo (Code Behind?) und wie ich das in C# Code umsetzen kann, der vom Compiler akzeptiert wird.

Wo finde ich ein Beispiel? Danke - Günther


Th69 - Fr 15.09.23 15:06

Hallo,

wieso meinst du, das mit Umbenennung dies dann funktionieren wird? Wird denn der Ordner, bei den Benutzern, wo es nicht funktioniert, gar nicht angelegt?

Entsprechend der Doku zu CoreWebView2Environment.CreateAsync [https://learn.microsoft.com/de-de/dotnet/api/microsoft.web.webview2.core.corewebview2environment.createasync] sollte der Aufruf so aussehen:

C#-Quelltext
1:
2:
3:
4:
string appPath = ...; // todo: WPF application path
string folderName = "..."// todo
string path = Path.Combine(appPath, folderName);
CoreWebView2Environment.CreateAsync(null, path);

(am besten vor dem Instantiieren des WebView2 Browsers, d.h. z.B. in der Main-Methode in "Program.cs").


Günther Weber - Fr 15.09.23 16:34

Danke, das war ja einfach. In der Doku hatte mich das
Zitat:
public static System.Threading.Tasks.Task

irritiert.

Aber WebView2 ignoriert diese Einstellung.

Der Ordner Benutzername.WebView2 wird von meinem Programm angelegt. Den Ordner Programmname.exe.WebView2 habe ich gelöscht, der wird aber dann sofort wieder neu angelegt.

Zitat:
Wird denn der Ordner, bei den Benutzern, wo es nicht funktioniert, gar nicht angelegt?

Der Ordner Programmname.exe.WebView2 ist ein Unterordner im Programmverzeichnis, der wird beim ersten Aufruf angelegt. Bei den Benutzern wo es nicht funktioniert ist er schon vorhanden, weil ein anderer das Programm schon aufgerufen hat. Bei einigen Benutzrn funktioniert es trotzdem. Wenn sich der Benutzer die Exe-Datei mit allen erforderlichen DLL's in einen anderen Ordner kopiert funktioniert alles.


Ralf Jansen - Fr 15.09.23 17:51

Ich würde empfehlen zumindest diesen Pfad lokal anzulegen und nach gebraucht also voraussichtlich beim schließen der Anwendung wieder zu löschen.

PS. Eigentlich würde ich empfehlen nichts aus einem Networkshare zu starten das war eigentlich schon immer eine Unart und spätestens seit ClickOnce ist deployment aus einem Networkshare einfach. Aber zumindest temporäres das nur zur App Laufzeit gebraucht wird sollte nur lokal existieren. Ich bin mir sicher Microsoft hat das Szenario das das temporäre Webview Zeug im sonstwo liegt nicht berücksichtig und funktioniert wenn überhaupt eher so zufällig.


Günther Weber - Fr 15.09.23 19:54

Inzwischen habe ich bereits auf Environment.SpecialFolder.ApplicationData umgestellt, aber ebenso erfolglos.
Beim Beenden löschen kommt nicht in Frage, weil dann immer wieder die Cookie-Abfrage kommt.
Ja, ClickOnce war mein Plan B, da werde ich mich jetzt also mit beschäftigen.
Vielen Dank.


Th69 - Sa 16.09.23 10:23

user profile iconGünther Weber hat folgendes geschrieben Zum zitierten Posting springen:
Danke, das war ja einfach. In der Doku hatte mich das
Zitat:
public static System.Threading.Tasks.Task
irritiert.

Stimmt, das habe ich hier komplett ignoriert.
Besser wäre daher

C#-Quelltext
1:
await CoreWebView2Environment.CreateAsync(null, path);                    

bzw.

C#-Quelltext
1:
var env = await CoreWebView2Environment.CreateAsync(null, path);                    

also diese Methode asynchron aufzurufen und zu warten, so daß man auch den Rückgabewert (env) auslesen kann.