2010-03-11 16 views
15

संपादित करें: जहां तक ​​मुझे पता है, इस समस्या का कोई समाधान नहीं है, इस तथ्य के लिए अभी तक एक और प्रमाण है कि किसी को सी # के वेब ब्राउजर का उपयोग नहीं करना चाहिए। हमने अपने कार्यक्रम की शुरुआत में एक चेतावनी संकेत के साथ समाप्त किया, उपयोगकर्ता को सूचित किया कि आईई के लिए कुकीज को मंजूरी दे दी जाएगी।आईई के लिए क्लीयरिंग के बिना सभी साइटों के लिए वेबब्राउज़र नियंत्रण की कुकीज़ साफ़ करना

मैं जो करने का प्रयास कर रहा हूं उसका संक्षिप्त संस्करण शीर्षक में है। यहां लंबा संस्करण है।

मेरे पास एक जटिल समस्या है जो मुझे यकीन है कि मुझे प्रतिक्रिया के रूप में बहुत सारे अनुमान प्राप्त होंगे। अच्छी तरह से इरादे से लेकिन दुर्भाग्यवश बेकार अनुमानों को कम से कम रखने के लिए, मुझे पहले उल्लेख करना चाहिए कि इस समस्या का समाधान सरल नहीं है, इसलिए दुर्भाग्य से सरल सुझाव दुर्भाग्य से मदद नहीं करेंगे, भले ही मैं प्रयास की सराहना करता हूं।

.NET WebBrowser घटक मूल रूप से आईई स्वयं है इसलिए किसी भी तरह के चेतावनी के साथ समाधान लगभग निश्चित रूप से काम नहीं करेंगे। मुझे वही करने की ज़रूरत है जो मैं करने की कोशिश कर रहा हूं, और यहां तक ​​कि एक मामूली चेतावनी भी पूरी तरह से इस उद्देश्य को पराजित करेगी। घमंडी लगने के जोखिम पर, मुझे किसी ऐसे व्यक्ति से सहायता चाहिए जो वास्तव में .NET WebBrowser और/या WinInet और/या Windows के अंतर्निहित सिस्टम के साथ संवाद करने के बारे में गहन ज्ञान है ... या सी ++ कोड को कैसे समाहित करना है सी#।

उसने कहा, मुझे उम्मीद नहीं है कि कोई मेरे लिए ऐसा करे, और मुझे कुछ आशाजनक संकेत मिले हैं जिन्हें बाद में इस प्रश्न में समझाया गया है।

लेकिन पहले ... जो मैं हासिल करने की कोशिश कर रहा हूं वह यह है।

मेरे पास एक विंडोज़ है। फोरम घटक जिसमें वेबब्रोसर नियंत्रण होता है। इस नियंत्रण की आवश्यकता है:

  1. सभी वेबसाइटों के लिए सभी कुकीज़ साफ़ करें।
  2. कई वेबसाइटों पर जाएं, एक के बाद एक, और कुकीज़ रिकॉर्ड करें और उन्हें सही तरीके से संभाल लें। यह हिस्सा पहले से ही ठीक काम करता है इसलिए मुझे इसके साथ कोई समस्या नहीं है।
  3. कुल्ला और दोहराना ... सैद्धांतिक रूप से हमेशा के लिए।

अब, वास्तविक समस्या यहां है। मुझे उन सभी कुकीज़ (किसी भी और सभी साइटों के लिए) को साफ़ करने की आवश्यकता है, लेकिन केवल वेब ब्राउजर नियंत्रण के लिए और कुकीज़ नहीं जो IE उचित उपयोग करता है। इस दृष्टिकोण के साथ मूल रूप से गलत क्या है तथ्य यह है कि .NET WebBrowser नियंत्रण IE है। लेकिन मैं एक जिद्दी जवान आदमी हूं और मैं इसे संभव होने पर जोर देता हूं, अन्यथा! ;)

यहां पर मैं इस समय अटक गया हूं।

वेब ब्राउजर नियंत्रण के लिए प्रोग्रामिंग रूप से सी # अकेले के माध्यम से सभी कुकीज़ को साफ़ करना असंभव है। किसी को DllImport और इसके साथ आने वाली सभी पागल सामग्री का उपयोग करना चाहिए। यह हिस्सा उस उद्देश्य के लिए ठीक काम करता है:

[DllImport("wininet.dll", SetLastError = true)] 
private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength);

और फिर, समारोह है कि वास्तव में कुकीज़ के समाशोधन करता है:

InternetSetOption(IntPtr.Zero, INTERNET_OPTION_END_BROWSER_SESSION, IntPtr.Zero, 0); 

तब सभी कुकी साफ़ कर जाते हैं और इस तरह के रूप में, मैं कर रहा हूँ खुश। कार्यक्रम इस तथ्य से अलग है कि यह आईई की कुकीज़ को भी साफ़ करता है, जिसे होने की अनुमति नहीं दी जानी चाहिए।

से एक साथी StackOverflower (यदि है कि एक शब्द), शेंग जियांग ने एक टिप्पणी में एक अलग समस्या को यह प्रस्ताव रखा, लेकिन आगे की विस्तृत नहीं किया:

"आप अपने आवेदन की कुकी को अलग करना चाहते हैं आप की जरूरत है IDocHostUIHandler2 :: GetOverrideKeyPath "

मैं IDocHostUIHandler2 और GetOverrideKeyPath के लिए इंटरनेट के आसपास देखा है, लेकिन मैं कैसे सी # से उन्हें इस्तेमाल करने के लिए मेरी WebBrowser नियंत्रण करने के लिए कुकीज़ को अलग करने की कोई जानकारी नहीं मिल गया है के माध्यम से कैश निर्देशिका रजिस्ट्री सेटिंग को ओवरराइड। विंडोज रजिस्ट्री के साथ मेरा अनुभव RegEdit तक सीमित है (इसलिए मैं समझता हूं कि यह विभिन्न डेटा प्रकारों के साथ एक पेड़ संरचना है लेकिन यह इसके बारे में है ... उदाहरण के लिए, आईई के साथ रजिस्ट्री के रिश्ते का मुझे कोई गहराई से ज्ञान नहीं है)।

IDocHostUIHandler2 डॉक्स: http://msdn.microsoft.com/en-us/library/aa753275%28VS.85%29.aspx

GetOverrideKeyPath डॉक्स:

यहाँ मैं MSDN पर अप खोदा है http://msdn.microsoft.com/en-us/library/aa753274%28VS.85%29.aspx

मुझे लगता है मैं मोटे तौर पर जानते क्या ये चीज़ें, मैं सिर्फ डॉन ' टी उन्हें उपयोग करने के लिए कैसे पता है।

+0

.NET वेब ब्राउज़र नियंत्रण (स्पष्ट रूप से कोई सी # वेब ब्राउज़र नियंत्रण नहीं है) एक रैपर है। iexplore.exe एक रैपर है। वे एक ही चीज़ के चारों ओर रैपर हैं। मुझे नहीं लगता कि आप ऐसा करने में सक्षम होने जा रहे हैं, क्योंकि वे दोनों सटीक उसी घटक तक पहुंच प्रदान करते हैं। –

+0

ध्यान दें कि आपके द्वारा पोस्ट किए गए दस्तावेज़ लिंक "वेबब्रोसर नियंत्रण" का संदर्भ लेते हैं। यह Win32 नियंत्रण को संदर्भित करता है, न कि .NET संस्करण। –

+0

हां, यही कारण है कि मैं खो गया हूं। यदि यह .NET संस्करण था, तो मुझे कोई समस्या नहीं होगी। :) – Teekin

उत्तर

4

क्या आईई में कुकीज़ को एक ही समय में कार्यान्वित करना आवश्यक है? क्या आपके प्रोग्राम के चलते आईई पर मूल कुकीज़ को "पुनर्स्थापित" करना संभव है?

अद्यतन:

एक और विचार:

मुझे आश्चर्य है कि क्या हुआ अगर आप प्रतिरूपण के माध्यम से, एक अलग उपयोगकर्ता खाते के अंतर्गत अपने कार्यक्रम चलाने पर क्या होगा। यह संभव है कि यह उन कुकीज़ को एक अलग विंडोज प्रोफाइल के तहत स्टोर करेगा ...

+0

हमम ... पागल विचार बिल्कुल नहीं!मुझे पूर्व विचार के बारे में क्या पसंद नहीं है यह है कि यह कार्यक्रम उपयोगकर्ताओं के लिए है ... और हम सभी जानते हैं कि वे क्या हैं। प्रतिरूपण विचार भी दिलचस्प है, हालांकि मैं शर्त लगा रहा हूं कि मैं विंडोज एक्सपी पर ग्राहकों के साथ समस्याओं में भाग लेगा और इससे पहले ... लेकिन मैं उनको जांचूंगा, धन्यवाद! – Teekin

+0

यदि 10 रैंक वाले किसी व्यक्ति ने इसे * उत्तर * के रूप में पोस्ट किया है, तो निश्चित रूप से उनका उपहास किया जाएगा। –

2

How to set and delete cookies from WebBrowser Control for arbitrary domains पर यह टिप्पणी एक गलती है। WinInet कैश फ़ोल्डर सेटिंग स्पष्ट रूप से आईई सेटिंग्स में नहीं है, लेकिन एक शैल फ़ोल्डर सेटिंग है, क्योंकि IDocHostUIHandler2 केवल आईई की रजिस्ट्री कुंजी में संग्रहीत सेटिंग्स को कस्टमाइज़ कर सकता है, यह इस कार्य के लिए उपयोगी नहीं है। मुझे सभी WinInet API को हुक करने के अलावा फ़ोल्डर स्थान को कस्टमाइज़ करने का कोई तरीका नहीं पता (और भविष्य में WinInet API को समायोजित करने के लिए एप्लिकेशन अपडेट करने के साथ अटक गया), जो सी # में आसान नहीं है। मैं अब पुरानी पोस्ट अपडेट करूंगा।

+0

जवाब देने के लिए धन्यवाद, शेंग। – Teekin

0

http://wiki.imacros.net/iimInit%28%29#Separate_Browser_Instances एक समाधान बताता है। मूल रूप से iMacros IE InPrivate मोड का उपयोग करता है।

+0

यह एक अच्छा विचार प्रतीत होता है, क्या WebBrowser का उपयोग करके इसे कॉल करने का कोई तरीका है? – tofutim

संबंधित मुद्दे