EDIT: Autant que je sache, il n'y a pas de solution à ce problème, ce qui prouve encore une fois qu'il ne faut pas utiliser WebBrowser C#. Nous avons fini avec un panneau d'avertissement au début de notre programme, notifiant à l'utilisateur que les cookies seront effacés pour IE.Effacement des cookies du contrôle WebBrowser pour tous les sites SANS correction pour IE lui-même
La version courte de ce que j'essaie de faire est dans le titre. Voici la version longue.
J'ai un problème complexe auquel je suis sûr que je vais recevoir beaucoup de suppositions en réponse à. Pour garder au minimum les suppositions bien intentionnées mais malheureusement inutiles, permettez-moi d'abord de mentionner que la solution à ce problème n'est pas simple, donc des suggestions simples ne vont malheureusement pas aider du tout, même si j'apprécie l'effort.
Le composant .NET WebBrowser est fondamentalement IE lui-même, donc les solutions avec toutes sortes de mises en garde ne fonctionneront certainement pas. Je dois faire exactement ce que j'essaie de faire, et même une mise en garde apparemment mineure va complètement à l'encontre du but. Au risque de sembler arrogant, j'ai besoin de l'aide de quelqu'un qui a vraiment des connaissances approfondies sur le .NET WebBrowser et/ou WinInet et/ou comment communiquer avec le système sous-jacent de Windows à partir de C# ... ou comment encapsuler du code C++ dans C#. Cela dit, je ne m'attends pas à ce que quelqu'un le fasse pour moi, et j'ai trouvé quelques conseils prometteurs qui sont expliqués plus tard dans cette question.
Mais d'abord ... ce que j'essaye de réaliser est ceci.
J'ai un composant Windows.Forms qui contient un contrôle WebBrowser. Ce contrôle doit:
- Effacer TOUS les cookies pour TOUS les sites Web.
- Visitez plusieurs sites Web, les uns après les autres, enregistrez des cookies et gérez-les correctement. Cette partie fonctionne déjà très bien, donc je n'ai aucun problème avec ça. Rincer et répéter ... théoriquement pour toujours.
Maintenant, voici le vrai problème. J'ai besoin d'effacer tous ces cookies (pour tous les sites), mais seulement pour le contrôle WebBrowser lui-même et PAS les cookies que IE utilise correctement. Ce qui est fondamentalement faux avec cette approche est bien sûr le fait que le contrôle .NET WebBrowser est IE. Mais je suis un jeune homme têtu et j'insiste pour que ce soit possible, sinon! ;)
Voici où je suis coincé pour le moment.
Il est tout simplement impossible d'effacer tous les cookies pour le contrôle WebBrowser par programmation via C# seul. Il faut utiliser DllImport et toutes les choses folles qui vont avec. Ce morceau fonctionne très bien à cette fin:
[DllImport("wininet.dll", SetLastError = true)]
private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength);
Et puis, dans la fonction qui ne fait la compensation des cookies:
InternetSetOption(IntPtr.Zero, INTERNET_OPTION_END_BROWSER_SESSION, IntPtr.Zero, 0);
Ensuite, tous les cookies effacés et s'en tant que tel, je suis content. Le programme fonctionne exactement comme prévu, outre le fait qu'il efface également les cookies d'IE, ce qui ne doit pas être autorisé.
D'un camarade StackOverflower (si c'est un mot), Sheng Jiang a proposé à un autre problème dans un commentaire, mais n'a pas précisé plus:
« Si vous voulez isoler les cookies de votre application, vous devez remplacer le paramètre de registre de répertoire du cache via IDocHostUIHandler2 :: GetOverrideKeyPath »
Je l'ai regardé autour de l'Internet pour IDocHostUIHandler2 et GetOverrideKeyPath, mais j'ai aucune idée de la façon de les utiliser à partir de C# pour isoler les cookies à mon contrôle WebBrowser. Mon expérience avec le registre Windows est limitée à RegEdit (donc je comprends que c'est une arborescence avec différents types de données mais c'est à peu près ça ... Je n'ai pas de connaissance approfondie de la relation du registre avec IE, par exemple).
Voici ce que je dégoté sur MSDN:
IDocHostUIHandler2 docs: http://msdn.microsoft.com/en-us/library/aa753275%28VS.85%29.aspx
GetOverrideKeyPath docs: http://msdn.microsoft.com/en-us/library/aa753274%28VS.85%29.aspx
Je pense que je sais à peu près ce ces choses font, je ne juste » Je sais comment pour les utiliser.
Le contrôle de navigateur Web .NET (il n'y a évidemment pas de contrôle de navigateur Web C#) est un wrapper. iexplore.exe est un wrapper. Ils sont tous les deux des enveloppes autour de la même chose. Je ne pense pas que vous serez en mesure de le faire, car ils donnent tous deux accès au même composant. –
Notez également que les liens de documentation que vous avez publiés font référence au "contrôle WebBrowser". Cela fait référence au contrôle Win32 et non à la version .NET. –
Oui, c'est exactement pourquoi je suis perdu. Si c'était la version .NET, je n'aurais aucun problème. :) – Teekin