Очистка файлов управления WebBrowser для всех сайтов БЕЗ очистки для самого IE

EDIT: Насколько я знаю, решения этой проблемы нет, что еще раз подтверждает тот факт, что С# WebBrowser не следует использовать. В начале нашей программы мы получили предупреждающий знак, уведомляющий пользователя о том, что файлы cookie будут очищены для IE.

Краткая версия того, что я пытаюсь сделать, - это заголовок. Здесь длинная версия.

У меня немного сложная проблема, и я уверен, что я получу много догадок в ответ. Чтобы свести к минимуму хорошо продуманные, но, к сожалению, бесполезные догадки, позвольте мне сначала упомянуть, что решение этой проблемы непросто, поэтому простые предложения, к сожалению, вообще не помогут, хотя я ценю усилия.

Компонент .NET WebBrowser в основном является IE, поэтому решения с любыми предостережениями почти наверняка не сработают. Мне нужно делать именно то, что я пытаюсь сделать, и даже кажущееся незначительное оскорбление полностью победит цель. Рискуя быть высокомерным, мне нужна помощь от кого-то, кто действительно имеет глубокие знания о .NET WebBrowser и/или WinInet и/или о том, как общаться с базовой системой Windows с С#... или как инкапсулировать код С++ в С#.

Тем не менее, я не ожидаю, что кто-нибудь сделает это для меня, и я нашел несколько многообещающих намеков, которые объясняются позже в этом вопросе.

Но сначала... то, чего я пытаюсь достичь, это.

У меня есть компонент Windows.Forms, который содержит элемент управления WebBrowser. Этот элемент управления должен:

  • Очистить ВСЕ файлы cookie для ВСЕХ веб-сайтов.
  • Посетите несколько веб-сайтов один за другим и запишите файлы cookie и обработайте их правильно. Эта часть работает отлично уже, поэтому у меня нет никаких проблем с этим.
  • Промыть и повторить... теоретически навсегда.

Теперь, вот настоящая проблема. Мне нужно очистить все эти файлы cookie (для любых и всех сайтов), но только для самого элемента управления WebBrowser и НЕ файлов cookie, которые использует IE. Что принципиально неправильно с этим подходом, конечно, тот факт, что элемент управления .NET WebBrowser - это IE. Но я упрямый молодой человек, и я настаиваю на том, что это возможно, иначе!;)

Здесь, где я застрял в данный момент.

Просто невозможно полностью очистить все куки для управления WebBrowser с помощью С#. Нужно использовать 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 (если это слово), Шэн Цзян предложил это другой проблеме в комментарии, но не уточнил далее:

"Если вы хотите изолировать свои файлы cookie приложений, вам необходимо переопределить параметр реестра каталога Cache через IDocHostUIHandler2:: GetOverrideKeyPath"

Я просмотрел интернет для IDocHostUIHandler2 и GetOverrideKeyPath, но я не знаю, как использовать их с С#, чтобы изолировать файлы cookie с моим элементом управления WebBrowser. Мой опыт работы с реестром Windows ограничен RegEdit (поэтому я понимаю, что это древовидная структура с разными типами данных, но об этом... У меня нет глубоких знаний о отношении к реестру с IE, например).

Вот что я выкопал на 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

Я думаю, что я точно знаю, что это такое, я просто не знаю, как их использовать.

Ответы

Ответ 1

Необходимо ли, чтобы файлы cookie функционировали в IE одновременно? Можно ли "восстановить" исходные файлы cookie обратно в IE после запуска вашей программы?

UPDATE:

Другая идея:

Интересно, что произойдет, если вы запустили свою программу под другой учетной записью пользователя через олицетворение. Возможно, он сохранит эти файлы cookie в другом профиле Windows...

Ответ 2

Этот комментарий в Как установить и удалить файлы cookie из WebBrowser Control для произвольных доменов является ошибкой. Параметр папки кэша WinInet, по-видимому, не находится в настройках IE, а является настройкой папки "Шелл", так как IDocHostUIHandler2 может настраивать настройки, хранящиеся в разделе реестра IE, для него не очень полезно. Я не знаю, как настроить местоположение папки, кроме как подключить все API-интерфейсы WinInet (и застрять с обновлением приложения для размещения будущих API-интерфейсов WinInet), что непросто в С#. Теперь я обновлю старый пост.