Autor Beitrag
Günther Weber
Hält's aus hier
Beiträge: 4

WIN 2000
C# (VS 2005 Prof)
BeitragVerfasst: Fr 15.09.23 14:11 

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 sollte der Aufruf so aussehen:
ausblenden 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").

Für diesen Beitrag haben gedankt: Günther Weber
Günther Weber Threadstarter
Hält's aus hier
Beiträge: 4

WIN 2000
C# (VS 2005 Prof)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

Für diesen Beitrag haben gedankt: Günther Weber
Günther Weber Threadstarter
Hält's aus hier
Beiträge: 4

WIN 2000
C# (VS 2005 Prof)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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
ausblenden C#-Quelltext
1:
await CoreWebView2Environment.CreateAsync(null, path);					

bzw.
ausblenden 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.

Für diesen Beitrag haben gedankt: Günther Weber