Править: Насколько я знаю, нет никакого решения этой проблемы, делая это еще одним завещанием к тому, что не нужно использовать WebBrowser C#. Мы закончили с предупредительным знаком в начале нашей программы, уведомив пользователя, что cookie будут очищены для IE.
Короткая версия того, что я пытаюсь сделать, находится в заголовке. Вот долгая версия.
У меня есть определенная сложная проблема, которая я уверен, что получу много предположений как ответ на. Для хранения хорошо предназначенного, но к сожалению бесполезные предположения к минимуму, позвольте мне сначала упомянуть, что решение этой проблемы не просто, таким образом, простые предложения, к сожалению, не помогут вообще, даже при том, что я ценю усилие.
Компонентом WebBrowser.NET является существенно сам IE, таким образом, решения с любыми видами протестов не будут почти наверняка работать. Я должен сделать точно, что я пытаюсь сделать, и даже на вид незначительный протест победит цель полностью. Рискуя тем, чтобы звучать высокомерным, мне нужна помощь от кого-то, у кого действительно есть всестороннее знание о WebBrowser.NET и/или WinInet и/или как общаться с базовой системой Windows от C#... или как инкапсулировать код C++ в C#.
Тем не менее я не ожидаю, что любой сделает это для меня, и я нашел некоторые многообещающие подсказки, которые объяснены позже в этом вопросе.
Но сначала... то, чего я пытаюсь достигнуть, является этим.
У меня есть Windows. Компонент форм, который содержит управление WebBrowser. Это управление должно:
Теперь, вот настоящая проблема. Я должен очистить все те cookie (для любого и всех сайтов), но только для самого управления WebBrowser а НЕ cookie который надлежащие использования IE. То, что является существенно неправильным с этим подходом, является, конечно, тем, что управлением WebBrowser.NET является IE. Но я - упрямый молодой человек, и я настаиваю на нем являющийся возможным, или иначе!;)
Вот то, где я застреваю в данный момент.
Вполне просто невозможно очистить все cookie для управления WebBrowser программно через один только C#. Нужно использовать DllImport и весь сумасшедший материал, который идет с ним. Этот блок хорошо работает с этой целью:
[DllImport("wininet.dll", SetLastError = true)]
private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength);
И затем, в функции, которая на самом деле делает очистку cookie:
InternetSetOption(IntPtr.Zero, INTERNET_OPTION_END_BROWSER_SESSION, IntPtr.Zero, 0);
Затем все cookie очищены и как таковы, я счастлив. Программа работает точно, как предназначено кроме того, что она также очищает куки IE, которые не должны быть разрешены для случая.
От одного товарища StackOverflower (если это - слово), Sheng Jiang предложил это другой проблеме в комментарии, но не уточнил далее:
"Если Вы хотите изолировать cookie своего приложения, необходимо переопределить установку реестра каталога Cache через IDocHostUIHandler2:: GetOverrideKeyPath"
Я осмотрел Интернет для IDocHostUIHandler2 и GetOverrideKeyPath, но у меня нет идеи того, как использовать их от C# для изоляции cookie к моему управлению WebBrowser. Мой опыт с реестром Windows ограничен RegEdit (таким образом, я понимаю, что это - древовидная структура с различными типами данных, но это об этом... У меня нет всестороннего знания отношений реестра с IE, например).
Вот то, что я вскопал на MSDN:
Документы IDocHostUIHandler2: http://msdn.microsoft.com/en-us/library/aa753275%28VS.85%29.aspx
Документы GetOverrideKeyPath: http://msdn.microsoft.com/en-us/library/aa753274%28VS.85%29.aspx
Я думаю, что знаю примерно, что делают эти вещи, я просто не знаю, как использовать их.
Необходимо ли одновременное использование файлов cookie в IE ? Можно ли «восстановить» исходные файлы cookie обратно в IE после запуска программы?
ОБНОВЛЕНИЕ:
Другая идея:
Интересно, что произойдет, если вы запустите свою программу под другой учетной записью пользователя, через олицетворение. Вполне возможно, что он будет хранить эти файлы cookie в другом профиле Windows...
Этот комментарий на Как устанавливать и удалять файлы cookie из WebBrowser Control для произвольных доменов является ошибкой. Параметр папки кэша WinInet, по-видимому, отсутствует в настройках IE, но является параметром папки Shell, поскольку IDocHostUIHandler2 может настраивать только параметры, хранящиеся в разделе реестра IE, это бесполезно для этой задачи. Я не знаю, как это сделать. настроить расположение папки, за исключением подключения всех API-интерфейсов WinInet (и застрял в обновлении приложения с учетом будущих API-интерфейсов WinInet), что в C # непросто. Я сейчас обновлю старый пост.